Firebase Cloud Firestore Collection Size 而不阅读每个文档?



有没有办法读取集合的长度?例如,如果集合 (users( 有 1,000 个用户,我是否可以请求集合长度?我知道集合项是索引,所以不确定这是否更容易计算读取而不会浪费 1,000 个读取。

集合长度的主要目的是我有一个管理仪表板,我想显示我们在Cloud Firestore中有多少用户。

默认情况下这是不可能的,但是,您可以保留文档/集合来保存与集合关联的元数据,在这种特定情况下,您可以使用分布式计数器。

这个想法是有一个云函数来侦听onWrite事件并增加或减少计数器,我无法准确回忆起代码,但它将是这样的:

const metadataCollectionRef = firebase.firestore().collection(`metadata`).doc(`users`)
export const myCollectionCounter = functions
.firestore.document(`users/{doc}`).onWrite(async (change, _context) => {
const oldData = change.before
const newData = change.after
const data = newData.data()
if (!oldData.exists && newData.exists) {
// creating
return metadataCollectionRef.set({
count: FieldValue.increment(1)
}, {merge: true})
} else if (!newData.exists && oldData.exists) {
// deleting
return metadataCollectionRef.set({
count: FieldValue.increment(-1)
}, {merge: true})
} 
})

这应该为您提供足够的信息来开始使用。文档在这里

最新更新