【问题标题】:Query Firebase Documents with unknown document name in the middle查询中间有未知文件名的 Firebase 文件
【发布时间】:2020-09-07 10:25:40
【问题描述】:

我的 Firebase 设置基本上是这样的:

收藏用户(带有字段:userID 的文档)-> 收藏愿望清单(带有字段:名称的文档)-> Collection wünsche

我想要的是查询wünsche,但我想使用这个代码,这是不允许的:

db
  .collection("users")
  .document(userID)
  .collection("wishlists")
  .document.whereField("name", isEqualTo: list.name) // <- this is the crucial part which I would like to call but is not possible
  .collection("wünsche")
  .order(by: "wishCounter")
  .getDocuments() {( querySnapshot, error) in }

有什么解决方法可以让我在whereField() 之后使用.collection 吗?

【问题讨论】:

  • 嗨,克里斯,如果 Bradley 提到的内容不能解决您的问题,则可能需要更新您的问题和/或代码以解决当前问题,以便我们更好地了解问题。
  • @Edgardo 它并没有真正解决问题,因为我无法弄清楚在我的情况下我应该调用什么......查看了文档并观看了一些教程,但仍然卡住......

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

基本上:您不能这样做,这不是 Firestore 查询的工作方式。您可以一次从一个集合中查询(集合组查询除外)。

当您使用 whereField 时,您正在形成一个 Firestore Query 对象,您将在其中检索原始集合中的文档列表。

所以这是单独有效的 Firestore Query 对象,然后您可以调用 get()

db.collection("users").document(userID)
.collection("wishlists").document.whereField("name", isEqualTo: list.name)

然后您不能在该原始查询中查询子集合,除非您正在查询子集合的特定文档或正在执行Collection Group Query。 (听起来集合组查询最适合您的用例,因此请查看文档)。

【讨论】:

  • 我在语法上苦苦挣扎。我无法在documentcollection 上调用collectionGroup
  • 您在数据库的根目录调用collectionGroup,它会自动查询与该名称匹配的所有集合/子集合,无论它们嵌套多深。因此,您要搜索的子集合的名称必须具有相同的名称,并且该名称不会在数据库的其他地方使用。
  • 检查答案中的链接,它提供了一些示例。请注意,您无法根据父文档/集合中的数据进行过滤,因此您可能需要将一些数据(例如 "name"wishlists 放入 wünsche 并从那里过滤。
  • 我查看了示例,但在我的情况下,我有 users 例如作为父集合。如何确保只搜索当前用户wishlists ??我在这里很困惑
猜你喜欢
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
相关资源
最近更新 更多