【问题标题】:Firebase Cloud Firestore Collection Size without reading every document? [duplicate]Firebase Cloud Firestore 集合大小而不阅读每个文档? [复制]
【发布时间】:2020-10-15 01:09:42
【问题描述】:

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

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

【问题讨论】:

  • 如果您想在不阅读所有内容的情况下进行计数,则需要自己跟踪。 Firestore 无法大规模免费做到这一点。

标签: firebase google-cloud-firestore


【解决方案1】:

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

这个想法是有一个云函数来监听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

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2019-01-12
    • 2018-11-19
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多