【问题标题】:Does collection group queries get data from all collections with the same name?集合组查询是否从具有相同名称的所有集合中获取数据?
【发布时间】:2019-10-06 15:03:18
【问题描述】:

我有这个 Firebase Cloud Firestore 架构:

my_db -> users -> uid -> places -> placeId

my_db -> places -> placeId

这个集合组查询会在两个路径中获得位置吗?如果是的话,我肯定会得到重复的。有什么办法可以避免吗?

编辑:我的目标是获取所有用户中的所有位置,而不是数据库中所有集合中的所有位置。

【问题讨论】:

  • 答案是肯定的,一个集合组查询places集合会返回所有名为places的集合的文档,无论是子集合还是子子集合等。 ,或根集合。但是我不知道是否有办法避免这种行为。
  • @RenaudTarnec 感谢您的评论。如果您找到避免这种情况的方法,请将其添加为答案。我真的需要它。
  • 其实我不知道如何避免,这就是为什么我写了评论而不是答案:-)
  • @RenaudTarnec 谢谢。
  • 集合组是一组具有相同ID的集合。因此,在您的情况下,您将设置一个 ID 为“places”的集合组。一个目的是能够跨该组进行查询。如果您不想这样做,为什么首先要设置一个集合组?此外,您可能只想考虑在用户或地点中保留地点,但不能同时在两者中保留。

标签: firebase google-cloud-firestore


【解决方案1】:

集合组查询始终使用您提供的名称查看具有任何深度的任何路径的所有顶级集合和子集合。没有办法改变这种行为。如果您想限制查询的范围,您需要以不同的方式命名您的集合。

如果您无法更改您的数据库结构,您至少可以通过查看您收到的快照中文档的路径来过滤客户端上的文档,从而忽略您不感兴趣的集合中的结果,并自行决定是否应处理该文档。

另一种策略是在顶级集合文档中不存在的每个子集合的文档中放置一个布尔字段。您可以使用该字段仅查询子集合中的文档。

【讨论】:

  • 不幸的是,我无法更改数据库结构,所以最后一个解决方案对我有用。因此,我在places 子集合中的每个文档上添加了一个新属性,并在查询中添加了一个额外的 where 调用。现在完美运行。谢谢史蒂文森。
猜你喜欢
  • 2021-05-27
  • 2013-11-22
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多