总有没有读取集合长度的信息?例如,如果一个集合(users
)有1,000个用户,我可以请求一个集合长度吗?我知道收集项目是索引,所以不确定是否可以更轻松地计算读取次数而不会浪费1000次读取。
收集长度的主要目的是我拥有一个管理仪表板,并且想要显示Cloud Firestore中有多少用户。
答案 0 :(得分:0)
默认情况下这是不可能的,但是,您可以保留一个文档/集合来保存与集合相关联的元数据,在这种情况下,您可以使用分布式计数器。
这个想法是要有一个云函数来监听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})
}
})
这应该为您提供足够的信息以开始使用。文件是here