我有一个名为“用户关注者”的收藏。我基本上需要显示关注者的总数。只是无法弄清楚完成块来获取计数。有一些资源可以帮助我获取集合下文档的数量,但是文档内部的值又如何呢?数据在Firestore中的存储方式如下:
Collection: "user-followers"
Document: "abc"
"user1":1
"user2":1
"user3":1
我想计算文档“ abc”下的用户数,即3。
有一些资源可以获取所有文档的数量,但是文档内部的数据数量又如何呢?
答案 0 :(得分:1)
我不确定像这样存储您的数据是最好的主意,但是您似乎在询问如何获取文档中字段的数量。
一种简单的解决方案是对子数据进行计数,在这种情况下为三。
func countFields() {
let collectionRef = self.db.collection("user-followers")
let documentRef = collectionRef.document("doc")
documentRef.getDocument(completion: { documentSnapshot, error in
if let error = error {
print(error.localizedDescription)
return
}
let q = documentSnapshot?.data()?.count
print(q)
})
}
documentSnapshot?.data()是一个字典,可以对其进行迭代,计数等。
答案 1 :(得分:0)
默认情况下不支持此功能,但是有几种解决方法。 (除非您可以查询整个集合以获取记录数...这意味着所有内容,实际上是所有内容)
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
const firestore = admin.firestore()
const counterRef = firestore.collection(`counters`)
export const keepCount = functions
.firestore.document(`user-followers/{doc}`).onWrite(async (change, _context) => {
const oldData = change.before
const newData = change.after
const data = newData.data()
if (!oldData.exists && newData.exists) {
// creating
return counterRef.doc(`user-followers`).set({
counter: firebase.firestore.FieldValue.increment(1)
})
} else if (!newData.exists && oldData.exists) {
// deleting
return return counterRef.doc(`user-followers`).set({
counter: firebase.firestore.FieldValue.increment(-1)
})ID)
} else {
// updating - do nothing
return Promise.resolve(true)
}
})
现在您只需要获取counters
集合,doc值就是您的集合名称user-followers
,而prop是计数器...您可以将此模式应用于需要保留的所有集合柜台的轨迹...
您始终可以使用其他工具(例如algolia或redis)来跟踪此情况,但是它们的成本更高。
我将应用云功能开始学习。