当前位置: 首页 > 知识库问答 >
问题:

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

庞修贤
2023-03-14

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

共有1个答案

柯唯
2023-03-14

使用QuerySnapshotSize属性,可以获得集合的文档数,如下所示:

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

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

因此,如果您的集合有很多文档,一个更负担得起的方法是维护一组保存文档数量的分布式计数器。每次添加/删除文档时,都会增加/减少计数器。

  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中,如何获取集合中的文档总数? 例如,如果我有 我想查询我有多少人,得到2。 我可以对 /people进行查询,然后获取返回结果的长度,但这似乎是一种浪费,特别是因为我将在更大的数据集上进行此操作。

  • 我现在有一个firestore,看起来像这样: 我使用的是,我试图获取“报告”集合中的所有文档。 我可以得到一个报告: 但我无法得到整个子集合 这可能吗?我是新手,所以这可能是一个愚蠢的问题。 谢谢 编辑控制台中收到的错误消息是: 我不确定权限,我没有访问权限,但如果是权限问题,我很困惑,我可以从集合中获取一个文档,但找不到获取所有文档的方法

  • 问题内容: 对于我的应用程序而言,至关重要的是能够从Firebase的集合中随机选择多个文档。 由于Firebase(我知道)没有内置本机函数来实现执行此操作的查询,因此我的第一个想法是使用查询游标选择随机的起始索引和终止索引,前提是我拥有​​其中的文档数集合。 这种方法行之有效,但只能以有限的方式进行,因为每次每次文档都会与其相邻文档一起依次送达。但是,如果我能够通过其父集合中的索引选择一个文档

  • 如果一个集合中有大量的文档,我是否可以在不加载整个集合的情况下获得文档的计数。

  • 假设我有这种结构 其中和是集合,和是文档 有没有一种方法可以通过一个查询获得根文档中包含的所有内容<如果我这样问 我只得到字段。我想要的是B的所有文件 我基本上希望我的查询返回 是否可能或者我真的需要对每个集合进行多个查询:/? 假设我有一个代表用户配置文件的非常深的嵌套集合树,我的成本会像地狱一样上升,因为每次我加载用户配置文件时,我都有一个读取请求的乘数其中N是我的树的深度: /.

  • 是否有方法获取将文档添加到集合后生成的文档id? 如果我将文档添加到代表社交媒体软件中“帖子”的集合中,我想获取该文档ID并将其用作不同集合中另一个文档中的字段。 如果我无法获取添加文档后生成的文档Id,我是否应该计算一个随机字符串,并在创建文档时提供Id?这样我就可以使用与其他文档中的字段相同的字符串了? 快速结构示例: