首页 文章

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

提问于
浏览
0

我正在开发一个社交应用程序 . 我使用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”等相同...在示例中,我已经解释了与post相关的专辑和媒体,但同样地,我想从其他节点检索数据,如Hashtags,Comments,Likes等 .

2 回答

  • 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你可以从album中获取数据然后从album id中获取数据,你可以从media table中获取数据 .

  • 0

    我专注于 album 方面 . 你也可以为 media 做同样的事情 .

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

    你可以试试这个:

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

相关问题