Firebase根据公共ID从多个节点检索数据

时间:2017-02-22 11:31:33

标签: android firebase firebase-realtime-database

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

**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" ...在示例中,我已经解释了与post相关的专辑和媒体,但同样地,我想从其他节点检索数据,如Hashtags,Comments,Likes等。

2 个答案:

答案 0 :(得分: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中获取数据,你可以从媒体表中获取数据。

答案 1 :(得分:0)

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

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

您可以尝试以下方法:

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