Firebase 集合组查询是否从具有相同名称的所有集合中获取数据?

Firebase 集合组查询是否从具有相同名称的所有集合中获取数据?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有以下Firebase云Firestore模式: my_db -> users -> uid -> places -> placeId 及 此集合组查询是否在两条路径中都有位置?如果是,我肯定会得到副本。有什么办法可以避免吗 编辑:我的目标是获取数据库中所有用户中的所有位置,而不是所有集合中的所有位置。集合组查询始终查看具有您提供的名称的任何深度的任何路径的所有顶级集合和子集合。没有办法改变这种行为。如果要限制查询的范围,则需要以不同的方式命名集合 如果无法更改数据库

我有以下Firebase云Firestore模式:

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

此集合组查询是否在两条路径中都有位置?如果是,我肯定会得到副本。有什么办法可以避免吗


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

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

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


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

答案是肯定的,集合组在
places
集合上的查询将返回名为
places
的所有集合中的文档,无论它们是子集合、子集合等还是根集合。不过,我不知道是否有办法避免这种行为。@RenaudTarnec感谢您的评论。如果你想办法避免这种情况,请加上它作为答案。我真的需要它。实际上我不知道如何避免它,这就是为什么我写了一条评论而不是回答:-)@RenaudTarnec无论如何谢谢。收藏组是一组具有相同ID的收藏。所以在你的情况下,你应该设置一个ID为“places”的收藏组。一个目的是能够跨该组进行查询。如果你不想这样做,为什么首先要成立一个收集小组?此外,您可能只想考虑在用户或位置上保留位置,但不能同时保留这两个位置。不幸的是,我不能更改数据库结构,所以最后一个解决方案是为我工作的。因此,我在
places
子集合中的每个文档上添加了一个新属性,并为查询添加了一个额外的where调用。现在工作很完美。谢谢你,史蒂文森。
my_db -> places -> placeId