我正在我的 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,即使它们没有附加文件?
结果返回 18 个文档的计数,而不是 140 个。
只有包含至少一个字段的文档才会开始存在。没有字段的文档在 Firebase 控制台中以 italics 显示。所以 Firebase 控制台告诉您这些文档不存在。你所做的只是在一个从未存在过的文档下创建一个子集合。也就是说,你只是在集合中为一个文档保留了一个ID,然后在其下创建了一个子集合。请记住,在文档 ID 下创建子集合将 not 自动创建该文档。
斜体 的文档仅代表一个占位符,可让您进一步导航到子集合。没有字段的单据不能查询,不能统计也不能删除。如果您不想在 Firebase 控制台中看到此类文档,则必须删除其子集合的所有文档才能看到它们被删除。
请记住,在 Firestore 中,文档和子集合不像文件系统文件和目录那样工作。子集合不以任何方式绑定到父文档。