firebase - Firebase 仅使用其 ID 从子集合中获取文档
问题描述
是否可以从没有父文档 ID 的子集合中获取文档?
我们有这样的结构:
RootCollection1
-- SubCollection1
-- SubCollection2
- Document1
-- SubCollection3
-- Document2
-- SubCollection2
-- Document3 [different fields with Document1]
应用程序用户将只有Document1 ID
.
我尝试实现一个集合组查询。请注意,SubCollection2
名称出现了两次,并且它们具有不同的字段/值。我只想从一个 SubCollection2 中获取文档。
是否可以在没有父文档 ID 的情况下从 document1 获取数据SubCollection1
和RootCollection1
。
解决方案
如果您无法使用完整路径找到文档(知道路径中所有文档和集合的名称),并且您不能使用集合组查询,那么您尝试做的事情是不可能的。您不能将集合组查询集中到特定路径 - 他们总是考虑所有集合中具有相同名称的所有文档。
您有两种可行的解决方法:
更改子集合的名称,使其唯一并且不与不应在集合组查询中查询的子集合重叠。
向文档添加一个字段,以便您可以在集合组查询的过滤器中使用它。您必须能够识别您感兴趣的文档,而无需考虑所有子集合中具有相同名称的所有文档。例如,如果您有一个名为“范围”的字段,您可以像这样缩小集合组查询的范围:
firestore.collectionGroup('coll').where('scope', '==', 'x')
或者您可以将文档的 ID 作为字段存储在其中,并对其进行过滤:
firestore.collectionGroup('coll').where('id', '==', 'id')
推荐阅读
- javascript - chrome 75(Windows 7、MacOS)上的 confirm() 弹出窗口是否存在错误?
- build - 是否可以在 Azure DevOps 的构建管道期间下载文件?
- spring - th:replace 标签中正确的 Thymeleaf 语法
- python - 为什么 list_companies() 不返回我在 Google 云人才解决方案中创建的公司?
- java - 解析错误 - Java 去除作为命令行参数发送的 JSON 字符串中的引号 (")
- mysql - 根据 2 个不同的表条件替换数据库字段
- r - 从 rmarkdown 的包含 tikz 节点推断 minipage 的大小
- jquery - 如何从 2 个相同的形式中获取 var
- ios - Swift iOS:dyld:dyld_sim 无法在受限进程中加载
- applescript - 从 Applescript 启动 Google Chrome 并设置位置