如何在Cloud Firestore中使用文档ID执行集合组查询

Aap*_*nen 8 android firebase google-cloud-firestore

几天前,由于Firestore显然具有更灵活的查询功能,我将应用程序帖子从实时数据库移至了Cloud Firestore。我一直在修改我的代码以将Firestore与新数据库一起使用。现在我遇到了一个问题。如何检索“帖子”(Posts)集合中包含“喜欢”(Likes)集合且包含特定命名的文档的每个文档?我不知道这是否有意义,所以这是展示问题的图像: 在此处输入图片说明

我有一个可查询的Firebase实时数据库查询,但无法弄清楚如何使用Firestore进行查询。有可能还是必须更改数据库的结构?如果必须更改结构,那么获得相同结果的最便捷方法是什么?

Dou*_*son 7

目前这对于集合组查询是不可能的。您可能会想对查询进行过滤FieldPath.documentId() == 'your-doucment-id',但这是不支持的。 FieldPath.documentId()实际上是一个令牌,它指向完全唯一的文档ID,其中包括文档的整个路径。

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

  • 大多数答案是“抱歉,在 firestore 中不可能” (11认同)
  • `.where(FieldPath.documentId, whereIn: idList)` 仅适用于 `collection`,不适用于 `collectionGroup`。另请记住,使用此方法时列表[限制为 10 个值](https://firebase.google.com/docs/firestore/query-data/queries#in_and_array-contains-any)。 (2认同)