【问题标题】:How to filter root collection on the basis of values in the sub collection in Firestore?如何根据 Firestore 中子集合中的值过滤根集合?
【发布时间】:2020-02-01 12:51:19
【问题描述】:

我在 Swift iOS 中使用 Cloud Firestore 数据库,我想根据每个文档的子集合中可用的值过滤根集合列表?

根集合-->帖子-->文档-->子集合-->文档-->字段值

“fieldvalue”的值必须决定根集合帖子中的文档列表

我在下面尝试了这个,但它没有按要求工作。

let postsRef = Firestore.firestore()
    .collection("posts")
    .document()
    .collection("comments")
    .whereField("comment_author_id", isEqualTo: Auth.auth().currentUser!.uid)
    .whereField("l1", isEqualTo: true)
    .limit(to: 50)

请帮忙

【问题讨论】:

  • 请添加它的屏幕截图,而不是描述您的数据库的外观。除此之外,什么不起作用?您只添加了一个查询。有什么不按您预期的方式工作。
  • @AlexMamo 我已经添加了屏幕截图,基本上有一个帖子和评论,我只想列出当前用户评论过的帖子,这些 cmets 与用户一起在帖子的子集合中评论的用户id
  • 请在您的comments 子集合中添加文档的屏幕截图。
  • @AlexMamo 也添加了 cmets 子集合
  • 好的,我马上给你写答案。

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

您的查询没有按要求工作,因为调用时:

.document()

紧接着:

.collection("posts")

在不传递任何参数的情况下,Firestore 并不真正知道您引用的是哪个文档。如果您想获取 2czkDrrg4gHgXbCID69u 文档中的所有 cmets,则应将该 id 传递给 document() 函数,如下所示:

.collection("posts").document("2czkDrrg4gHgXbCID69u")

请记住,Firestore 查询很浅,只能从运行查询的集合中获取 cmets。单个查询只能使用单个集合中文档的属性。

如果您想获取存在于您的posts 集合中的所有文档中的所有 cmets,那么您应该使用Firestore collection group query。请注意,所有子集合必须具有相同的 (cmets) 名称。

【讨论】:

  • 感谢您的指导,我将立即使用它
猜你喜欢
  • 2020-11-07
  • 2018-12-11
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多