【问题标题】:Firebase retrieve data from multiple nodes based on common IDFirebase 根据通用 ID 从多个节点检索数据
【发布时间】:2017-02-22 11:31:32
【问题描述】:

我正在开发一个社交应用程序。我使用 Firebase 作为我的后端(API)。我无法运行单个查询来获取所有所需的数据。我的数据库结构如下:

**post**
{
 "postID1":
 { url: "http://stackoverflow.com" 
   desc: "some description here" } 
 "postID2": 
  { url: "http://google.com"
   desc: "again some description here"
 } 
}
**album**
{
  postID1:
{
     albumID1:
     {
          type: 'Image'
          name: 'my first album'
     }

}
    postID2:
{
     albumID2:
     {
          type: 'youtube'
          name: 'my second album'
          url: 'http://youtube.com'
     }

}
**media**
albumID1
{
 mediaID1:
 {
  type: 'abc'
  desc: 'some description'
 }
}

我想获取所有帖子,包括其中的所有媒体文件。 例如,我想首先获取“postID1”,然后是专辑,然后是媒体文件,所有 3 个节点都通过唯一的 postID 相互连接。 “postID2”等也是如此......在示例中,我已经解释了与帖子相关的专辑和媒体,但同样我想从其他节点(如 Hashtags、Comments、Likes 等)检索数据。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    使用这种结构,您将无法使用单个查询来获取数据。 您有 2 个选项。

    1)要么你像这样改变你的结构。

    **post**
    -> "postID1":
     -> url: "http://stackoverflow.com" 
     -> desc: "some description here" 
     -> albumID1
              ->  type: 'Image'
              ->  name: 'my first album'
              ->  mediaID1:
                       ->  type: 'abc'
                       -> desc: 'some description'
    

    因为我们知道 firebase 是 noSQL,所以不需要遵循 sql 规则。 通过这种结构,您可以在一个查询中获取所有数据

    2) 您可以在当前结构中编写多个查询。 就像首先您从 post 表中获取数据,然后使用 post id 您可以从专辑中获取数据,然后从专辑 id 中您可以从媒体表中获取数据。

    【讨论】:

    • 因为我已经设置了数据库并且大部分功能已经在工作。我想选择选项 2。但由于 firebase 异步运行查询,我仍然面临编写多个查询的一些问题。在我获取所有帖子时,在同一个循环中,我想获取第一个 postID 和相关数据(专辑、媒体),然后循环应该对 postID2 执行相同的操作,依此类推。但现在发生的事情是,当我获得专辑查询同时运行的所有帖子时。
    【解决方案2】:

    我专注于专辑方面。您也可以对 媒体 执行相同的操作。

    对于 post 节点,一个查询就足够了

    你可以试试这个:

    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){
        for (DataSnapshot  dataSnapshot1:postSnapshot.getChildren()){
            //do something here            
        }        
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多