如何获取firestore集合下的文档数量? [复制]

Posted

技术标签:

【中文标题】如何获取firestore集合下的文档数量? [复制]【英文标题】:How to get the number of documents under a firestore collection? [duplicate] 【发布时间】:2020-07-29 16:32:06 【问题描述】:

我想获取 firestore 集合中的文档总数,我正在制作一个论坛应用程序,所以我想在每个讨论中显示当前的 cmets 数量。 有db.collection("comments").get().lenght 之类的东西吗?

【问题讨论】:

我想你可能也对这篇文章感兴趣,How to count the number of documents in a Firestore collection?。 【参考方案1】:

通过QuerySnapshotsize属性,可以得到一个集合的文档数,如下:

db.collection("comments").get().then(function(querySnapshot) 
    console.log(querySnapshot.size);
);

但是,您应该注意,这意味着您每次都阅读了集合中的所有文档,您想要获取文档的数量,因此它有成本。

因此,如果您的集合有很多文档,更实惠的方法是维护一组包含文档数量的 distributed counters。每次添加/删除文档时,都会增加/减少计数器。

基于documentation,以下是写操作的方法:

首先,初始化计数器:

  const db = firebase.firestore();
  function createCounter(ref, num_shards) 
    let batch = db.batch();

    // Initialize the counter document
    batch.set(ref,  num_shards: num_shards );

    // Initialize each shard with count=0
    for (let i = 0; i < num_shards; i++) 
      let shardRef = ref.collection('shards').doc(i.toString());
      batch.set(shardRef,  count: 0 );
    

    // Commit the write batch
    return batch.commit();
  

  const num_shards = 3;  //For example, we take 3
  const ref = db.collection('commentCounters').doc('c'); //For example

  createCounter(ref, num_shards);

然后,当你写评论时,使用批量写如下:

  const num_shards = 3; 
  const ref = db.collection('commentCounters').doc('c');

  let batch = db.batch();
  const shard_id = Math.floor(Math.random() * num_shards).toString();
  const shard_ref = ref.collection('shards').doc(shard_id);

  const commentRef = db.collection('comments').doc('comment');
  batch.set(commentRef,  title: 'Comment title' );

  batch.update(shard_ref, 
    count: firebase.firestore.FieldValue.increment(1),
  );
  batch.commit();

对于文档删除,您将减少计数器,使用:firebase.firestore.FieldValue.increment(-1)

最后,看文档如何查询计数器值!

【讨论】:

这不是我所期望的,但它确实有效......非常感谢。 请注意,在副本中很好地讨论了计数文件的问题。如果您有其他信息,请在此处添加。

以上是关于如何获取firestore集合下的文档数量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

FIRESTORE - 如何在文档中获取集合的值?

Firestore - 如何在将文档添加到集合后获取文档 ID

Firestore - 如何在不真正获取所有文档的情况下找到可以使用查询获取的文档数量? [复制]

Firestore:如何在集合中获取随机文档

Firestore:获取带有和不带有子集合数据的集合[重复]

引用了 Firestore 如何从另一个集合文档 id 中获取集合值