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

如何使用Cloud FiRecovery获取集合中文档的数量[副本]

裘嘉树
2023-03-14

在Firestore中,如何获取集合中的文档总数?

例如,如果我有

/people
    /123456
        /name - 'John'
    /456789
        /name - 'Jane'

我想查询我有多少人,得到2。

我可以对 /people进行查询,然后获取返回结果的长度,但这似乎是一种浪费,特别是因为我将在更大的数据集上进行此操作。

共有3个答案

越安翔
2023-03-14

如果使用AngulareFire2,则可以执行以下操作(假设构造函数中注入了私有afs:AngularFirestore):

this.afs.collection(myCollection).valueChanges().subscribe( values => console.log(values.length));

在这里,valuemyCollection中所有项目的数组。您不需要元数据,因此可以直接使用value eChange()方法。

井高峯
2023-03-14

聚合是一种可行的方法(firebase函数看起来是更新这些聚合的推荐方法,因为客户端向您可能不想公开的用户公开信息)https://firebase.google.com/docs/firestore/solutions/aggregation

另一种方法(不推荐)不适合大型列表,需要下载整个列表:res.size,如下示例:

   db.collection("logs")
      .get()
      .then((res) => console.log(res.size));
单凯捷
2023-03-14

您目前有3个选项:

这基本上就是你提到的方法。从集合中选择全部,并在客户端进行计数。这对于小数据集来说已经足够好了,但如果数据集较大,显然不起作用。

使用这种方法,您可以使用Cloud Functions为集合中的每次添加和删除更新计数器。

这适用于任何数据集大小,只要添加/删除的速度小于或等于每秒1次。这将为您提供一个要阅读的文档,以立即提供几乎当前的计数。

如果需要每秒超过1个,您需要实现每个留档的分布式计数器。

在客户端中,您可以在添加或删除文档的同时更新计数器,而不是使用云函数。这意味着计数器也将是最新的,但您需要确保在添加或删除文档的任何位置都包含此逻辑。

与选项2一样,如果要超过每秒,则需要实现分布式计数器

 类似资料:
  • 我想获得firestore集合中的文档总数,我正在制作一个论坛应用程序,所以我想显示每个讨论中的当前评论量。有之类的东西吗?

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

  • 如何使用Spring FirestoreReactiveRepository从子集合中获取文档? 问题是:如何动态地将子集合名称或路径指定给@Document annotation? 我的firestore系列:(城市是一级系列,公寓是本系列的子系列) 波乔市 POJO公寓是: 从城市收集中获取数据的CityRepository 调用findById(nyc)时,公寓返回空值。我想在城市对象中填充

  • 如何使用_id检索在我的收藏中创建的最新文档? 我试图通过以下方式在我的Web应用程序中实现分页: 正在检索我页面加载的最后一个文档的_id 在下一页中检索大于最后一个文档_id的文档(http://tldrify.com/dcj) 我采用这种方法的原因是,我试图利用存储数据中的自然顺序——文档中存储的id。 获取下一组帖子的示例: 我的猫鼬模式: 据我所知,Mongo的文件已经按照以下文件从最旧

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

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