【问题标题】:How to perform collection group query using document ID in Cloud Firestore如何在 Cloud Firestore 中使用文档 ID 执行集合组查询
【发布时间】:2019-10-04 21:28:03
【问题描述】:

几天前,我将我的应用程序帖子从实时数据库移到了云 Firestore,因为 Firestore 显然具有更灵活的查询。我一直在修改我的代码以使用 firestore 作为新数据库。现在我遇到了一个问题。如何检索“帖子”集合中的每个文档,这些文档具有包含特定命名文档的“喜欢”集合?我不知道这是否有意义,所以这里有一张展示问题的图片:

我对 firebase 实时数据库进行了有效查询,但不知道如何使用 firestore 进行查询。有可能还是我必须更改数据库的结构?如果我必须改变结构,获得相同结果的最方便的方法是什么?

【问题讨论】:

  • 有非常清晰的文档供查询。你必须搜索here
  • 是的,我确实阅读了我能找到的所有内容,但没有弄明白。
  • @AapoVainonen “包含特定命名的文档”是什么意思? Likes 集合中的 doc 具有特定的字段值?特定的文档 ID?
  • 我的意思是例如如何检索特定用户喜欢的每个帖子。所以在这个例子中检查“喜欢”集合是否包含我们想要查看喜欢的帖子的用户用户 ID。抱歉,如果这没有意义,英语不是我的母语。
  • 因此在文档yQ6m2...(在Likes 集合中)有一个名为例如liker 的字段,您想搜索该字段具有特定值的文档。对吗?

标签: android firebase google-cloud-firestore


【解决方案1】:

目前这对于集合组查询是不可能的。您可能很想对FieldPath.documentId() == 'your-doucment-id' 的查询进行过滤,但这不被支持。 FieldPath.documentId()其实是一个token,指的是完全唯一的文档id,包含了文档的整个路径。

解决方法是将文档 ID 作为字段存储在文档中,然后过滤该字段的内容。因此,如果文档有一个名为 id 的字段,其中包含文档的 ID,则可以查询 collectionGroup("Likes").whereEquals('id', 'your-document-id')

【讨论】:

  • 我找不到collectionGroup之类的东西?
  • @AapoVainonen 访问firebase.google.com/docs/firestore/query-data/… 并向下滚动到该部分的第二个代码块。但我认为在这种情况下将 Likes 存储为单独的表可能会更好(与 Posts 处于同一级别)并执行 collection('Likes').doc(LIKE_ID)。
  • .where(FieldPath.documentId, whereIn: idList) 仅适用于collection,不适用于collectionGroup。还要记住,使用这种方法的列表是limited to 10 values
  • 大多数答案是“抱歉,它在 Firestore 中是不可能的”
  • 我尝试使用该解决方法。我得到“'CollectionGroup'.ts(2339) 类型上不存在属性 'whereEquals'”。也许应该是,"db.collectionGroup("Cart").where('id','==', id).get()"
猜你喜欢
  • 1970-01-01
  • 2021-08-12
  • 2021-09-26
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多