Firebase Cloud Firestore集合大小,无需阅读每个文档?

时间:2020-06-24 17:25:31

标签: firebase google-cloud-firestore

总有没有读取集合长度的信息?例如,如果一个集合(users)有1,000个用户,我可以请求一个集合长度吗?我知道收集项目是索引,所以不确定是否可以更轻松地计算读取次数而不会浪费1000次读取。

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

1 个答案:

答案 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