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

问题描述:

我正在研究社交应用程序。我使用Firebase作为我的后端(API)。我无法运行单个查询来获取所有需要的数据。我的数据库结构如下:Firebase基于公共ID从多个节点检索数据

**post** 
{ 
"postID1": 
{ url: "http://*.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等检索数据。

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

1)你可以像这样改变你的结构。

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

这是因为我们知道,火力是NOSQL所以没有必要遵循SQL规则。 通过此结构,您可以在一个查询中获取所有数据

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

+0

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

+0

你可以把你的代码是有这个查询吗? –