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

Android 如何在Cloud Firestore中使用文档ID执行集合组查询,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,所以几天前,我将我的应用程序帖子从实时数据库转移到云firestore,因为firestore显然具有更灵活的查询功能。我一直在修改代码,以便将firestore作为新数据库使用。现在我遇到了一个问题。如何检索“Posts”集合中包含“Likes”集合且包含特定命名文档的每个文档?我不知道这是否有意义,所以下面是一张图片,展示了这个问题: 我对firebase实时数据库有一个有效的查询,但不知道如何使用firestore进行查询。是否有可能或必须更改数据库的结构?如果必须更改结构,那么获得相同

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


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

这在集合组查询中目前是不可能的。您可能会试图在查询中为
FieldPath.documentId()==“您的DoucmentID”
设置一个过滤器,但这是不受支持的
FieldPath.documentId()
实际上是一个令牌,它指向完全唯一的文档id,其中包括文档的整个路径


解决方法是将文档ID存储为文档中的一个字段,并对该字段的内容进行过滤。因此,如果文档有一个名为
id
的字段和文档的id,您可以查询
collectionGroup(“Likes”)。whereEquals(“id”,“您的文档id”)

有非常清晰的文档可供查询。你必须搜索是的,我读了所有我能找到的东西,但没有弄明白。@AapoVainonen你说的“包含特定命名文档”是什么意思?Likes集合中的文档是否有特定的字段值?特定的文档id?我的意思是,例如,如何检索特定用户喜欢的每个帖子。因此,在本例中,检查“Likes”集合是否包含我们希望看到喜欢的帖子的用户id。抱歉,如果这没有意义,英语不是我的母语。因此,在文档
yQ6m2…
(在
Likes
集合中)有一个名为example
liker
的字段,您希望搜索对该字段具有特定值的文档。对吗?我找不到collectionGroup?@AapoVainonen访问并向下滚动到该部分的第二个代码块。但我认为在这种情况下,最好将Likes存储为一个单独的表(与Posts处于同一级别),并收集('Likes').doc(LIKE_ID)。您好,Doug Stevenson,看起来我们不能将
FieldPath.documentId()
一起使用,对吗?例如:db.collection(“events”).where(“id”,“in”,“1,2,3])
.where(FieldPath.documentId,其中:idList)
仅适用于
collection
,而不适用于
collectionGroup
。请记住,列表使用的是这种方法。大多数答案是“抱歉,在firestore中不可能”