Cloud Firestore-如何从两个集合中获取关系型数据?[英] Cloud Firestore - How to get relational data from two collections?

问题描述

我想在Cloud Firestore中定义这两个集合.一些示例数据如下所示:

播放列表:

  • 名称:" playlist1"
  • songcount://要在实时计算

歌曲:

  • 标题:" Song1"
  • playlistid:" playlist1"

  • 标题:" Song2"

  • playlistid:" playlist1"

  • 标题:" Song3"

  • playlistid:" playlist1"

此外,在我的Android应用程序中,我想显示所有播放列表和所有歌曲的单独列表.但是,在显示所有播放列表的列表时,我想根据" SongCount"中的值显示每个播放列表的名称.

请建议我需要在云的Firestore中进行哪种查询才能实现这一目标.是否有JOIN功能可用,或者我必须将歌曲集合放在循环中,并将其播放列表为" playlist1"计数,然后为所有要在播放列表中列出的播放列表重复吗?我想拥有一个更聪明的解决方案,但找不到互联网上的解决方案.

任何帮助将是一个很好的帮助.感谢您的时间.

推荐答案

有可用的联接功能吗?

不幸的是,Firestore中没有查询. Firestore中的查询很浅:它们仅从查询所遇到的收集中获取物品.没有办法从单个查询中的顶级集合和其他收藏集或子收集中获取文档. Firestore一口气不支持不同收藏的查询.单个查询只能在单个集合中使用文档的属性.因此,我能想到的最简单的解决方案是使用看起来与此相似的数据库结构:

Firestore-root
   |
   --- playlists (collection)
   |     |
   |     --- playListId (document) //The unique id of the play list
   |           |
   |           --- name: "playlist1"
   |
   --- songs (collection)
        |
        --- playListId (document) //The same as the above playListId
               |
               --- playListSongs
                     |
                     --- songId
                          |
                          --- title: "song1"

为了显示所有播放列表,只需将侦听器附加到playlists引用并获取所有playlist对象.如果您想获得与特定播放列表相对应的所有歌曲,只需将侦听器附加到songs\playListId\playListSongs并获取所有song对象.

关于与播放列表相对应的所有歌曲的数量,我建议您从this post ,我在其中解释了您可以实现的目标.因此,根据我答案的最后一部分,您的firebase实时数据库结构应该看起来像:

Firebase-Realtime-Database-root
    |
    --- playlists
          |
          --- playListIdOne: numberOfSongs
          |
          --- playListIdTwo: numberOfSongs

编辑:

我不能说我已经完全理解了它,尤其是因为第一个答案涉及Firestore,第二个答案涉及Firebase实时数据库.

我给了您这个解决方案,因为如果您想使用Cloud Firestore来计数和更新元素,每次添加或删除歌曲时,每个写入/删除操作都会被Firestore收取. Firebase Realtime数据库还有另一个定价计划,因此您不会为此收取费用.请参阅 firestore定价请再次阅读,直到最后,我的回答是我的回答,我的回答是 normalization normalization natormitization n normalization with firebase database .它适用于Firebase实时数据库,但相同的规则适用于Cloud Firestore.

另外,当您复制数据时,您需要牢记一件事.就像添加数据一样,您需要维护它.换句话说,如果要更新/删除项目,则需要在其存在的每个地方进行.

请记住,可以在一个以上的播放列表中找到同一首歌.

这没关系,因为每首歌曲都有不同的ID.

本文地址:https://www.itbaoku.cn/post/978366.html