Firebase firestore嵌套查询

Firebase firestore嵌套查询,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有一个Firestore数据库结构,如下所示: Songs: - song1 - artistName - songCover - song2 - song3 Songs: - song1 - artistName - songCover -> Favorited (Subcollection):

我有一个Firestore数据库结构,如下所示:

Songs:
    - song1
         - artistName
         - songCover 
    - song2
    - song3
Songs:
        - song1
             - artistName
             - songCover 

             -> Favorited (Subcollection):
                   - userID1

        - song2
        - song3
我希望能够抓住所有喜欢某首歌的用户

在过去,我制作了如下结构

FavoriteSongs
     - IDSong1
            - userID1 (with favorited the song)
                - artistName
                - songCover
            - userID2
Songs:
     - song1
       - artistName
       - songCover
在前面的结构中,我在用户id节点中制作了每首歌曲的精确副本。但是,当一首歌曲更改其封面时,这会迫使我更改FavoritedSongs中的每个文档,其中更改的歌曲ID与FavoritedSongs的IDSong键匹配

在阅读有关集合组查询的内容时,我想我可以这样做:

Songs:
    - song1
         - artistName
         - songCover 
    - song2
    - song3
Songs:
        - song1
             - artistName
             - songCover 

             -> Favorited (Subcollection):
                   - userID1

        - song2
        - song3
这个wat I可以检索特定用户喜欢的所有歌曲,并且我可以获取包含所有更新值的歌曲,因为更改歌曲的封面只会影响一个文档


这可能吗?如果可能,我如何编写查询?

如果要编写一个集合组查询,在某些文档属性(也称为“favorited”)为true的子集合(名为“favorited”)中查找文档:

为了设置此布尔属性,每个用户都需要能够在子集合中使用与其UID相同的ID编写自己的文档。因此,要标记收藏夹,用户将:

firestore
    .collection("songs")
    .doc(songId)
    .collection("favorited")
    .doc(userId)
    .set({ favorited: true })

请核对副本。这与您所说的“问题”完全相同。@AlexMamo此问题是询问如何在给定现有数据库结构的情况下编写集合组查询。“我看不出它是复制品。@DougStevenson哦,是的,你说得对。我没听到那句话。感谢您重新打开此问题。@AlexMamo我不理解提供的答案,因为查询
firestore.collectionGroup(“favorited”)。where(“favorited”),“==”,true)
我是否指定要获取他们喜爱歌曲的用户。另外,这个查询是否会返回
歌曲
文档或
收藏中的文档?@Andrea我想你应该问问Doug。很抱歉早些时候结束了这个问题。我错过了集合组查询的部分。快速提问,上一个方案是将用户喜爱的歌曲列表返回给我,还是将喜爱的集合中的文档返回给我?在查询中,我在哪里限制只获取特定用户喜爱的歌曲?找到的每个文档在其完整路径中将包含喜爱的歌曲的ID。您可以通过查看文档的引用从中提取它。如果要按用户进行限制,还必须将用户id作为字段放入文档中,并将其添加到where子句中。