【问题标题】:List firestore collection ids filtered by criteria列出按条件过滤的 Firestore 集合 ID
【发布时间】:2020-09-23 12:11:45
【问题描述】:

在 Firestore 的 Go 包中,我可以通过执行类似的操作轻松获取 ID 列表

client.Collection("mycollection").DocumentRefs()

通过查询,我可以在迭代文档之前轻松过滤文档

client.Collection("mycollection").Where("x", "==", "y").Documents()

Query 似乎缺少仅获取.DocumentRefs() 的选项是否有某种方法可以获取与特定查询匹配的 DocumentRefs 列表,而无需实际获取所有匹配的文档(每个文档都会产生读取成本)?

底线是,在我应用过滤逻辑来获取受约束的文档 ID 列表后,我想对 ID 的值运行基于正则表达式的额外过滤,过滤后的 ID 列表是我的最终结果,不需要 fr正在获取文档。

【问题讨论】:

  • 我同意 Doug Stevensons 的回答,但如果您想了解有关代码的更多信息,可以查看this doc。
  • 三年前我问过一个类似的问题。 stackoverflow.com/questions/49880839/…Doug 然后让我提出功能请求。我这样做了。也许你也应该这样做?不敢相信我们是唯一有这种用例的人。即使我在客户端缓存了所有文档,我仍然需要在每次查询时重新加载所有文档。多么浪费。这里是功能请求的链接:firebase.google.com/support/troubleshooter/report/features

标签: go google-cloud-firestore


【解决方案1】:

Firestore 查询始终返回每个匹配文档的全部内容。没有仅返回文档 ID 或引用的“轻量级”查询。所有提供的 Firestore SDK 都是这种情况,而不仅仅是 go。

一般而言,建议不要将数据存储在文档的 ID 中以进行过滤。如果您能够预先计算文档应匹配的条件,并将该数据放入文档的字段中,您的用例将会更好地工作。还应该注意的是,Firestore 不支持正则表达式类型的查询,因为这些查询不能按照 Firestore 的要求进行大规模扩展。

【讨论】:

  • 您认为这个“功能”会出现吗?正如我所描述的,如果您已经在缓存中下载所有文档,那么下载所有文档是没有意义的。据我了解数据库,如果我查询索引,则无需下载文档。这更像是您的 API 的一项功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多