Firestore“.count()”返回不正确的值

问题描述 投票:0回答:1

我正在我的 Firestore STAGING 实例上运行查询,其中的集合足够小,我知道我有大约 140 个文档 ID。

查询:

const my_coll_count = await app.firestore()
  .collection('my_collection')
  .count()
  .get()
  .then(s => s.data().count);

结果返回 18 文档的计数,而不是 140

同样,当我访问 Google Cloud Console 的 Firestore 中的数据库时,底部的总计读取了 18 文档。这对我来说也毫无意义,因为它与我从 Firebase 控制台查看时看到的同一集合完全不同。

然而,当我使用几个“where”子句循环遍历同一个集合以添加数据时,它会愉快地更新 122 文档。 Whaaaaattttt 是 goggggg onnnnnnn 吗?!

有什么理由我无法收到此集合中所有 ID 的准确总数?

我自己最好的猜测是,这可能与集合主要由 ID 组成而没有任何数据字段这一事实有关,但我觉得这不应该将它们排除在外。大多数文件都有一个子集,应该算作某些东西,不是吗?

更新:这是真的!只有实际有文档的记录才会被计算在内。它还会计算只是一个空对象 {} 的文档,但如果它们确实为 null,则不会计算它们。但是,这些 ID 都有一个子集合。有没有一种体面的方法可以计算所有 ID,即使它们没有附加文件?

firebase google-cloud-platform google-cloud-firestore aggregate
1个回答
2
投票

结果返回 18 个文档的计数,而不是 140 个。

只有包含至少一个字段的文档才会开始存在。没有字段的文档在 Firebase 控制台中以 italics 显示。所以 Firebase 控制台告诉您这些文档不存在。你所做的只是在一个从未存在过的文档下创建一个子集合。也就是说,你只是在集合中为一个文档保留了一个ID,然后在其下创建了一个子集合。请记住,在文档 ID 下创建子集合将 not 自动创建该文档。

斜体 的文档仅代表一个占位符,可让您进一步导航到子集合。没有字段的单据不能查询,不能统计也不能删除。如果您不想在 Firebase 控制台中看到此类文档,则必须删除其子集合的所有文档才能看到它们被删除。

请记住,在 Firestore 中,文档和子集合不像文件系统文件和目录那样工作。子集合不以任何方式绑定到父文档。

© www.soinside.com 2019 - 2024. All rights reserved.