2017-02-22 105 views
0

我正在研究社交應用程序。我使用Firebase作爲我的後端(API)。我無法運行單個查詢來獲取所有需要的數據。我的數據庫結構如下:Firebase基於公共ID從多個節點檢索數據

**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等檢索數據。

回答

1

With這種結構將無法使用單個查詢獲取數據。 你有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' 

這是因爲我們知道,火力是NOSQL所以沒有必要遵循SQL規則。 通過此結構,您可以在一個查詢中獲取所有數據

2)您可以在當前結構中編寫多個查詢。 首先,您可以從帖子表中獲取數據,然後使用帖子ID從專輯中獲取數據,然後從專輯ID獲取數據,您可以從媒體表中獲取數據。

+0

由於我已經設置了數據庫,並且大部分功能已經在工作。我想去選項2. 但我仍然面臨一些寫作多個查詢的問題,因爲firebase以異步方式運行查詢。在我獲取所有帖子的時候,在同一個循環中,我想獲取第一個postID和相關數據(專輯,媒體),然後循環應該對postID2執行相同的操作,依此類推。 但是現在發生的事情是在我收到專輯查詢同時運行的所有帖子的時候。 – Daishy

+0

你可以把你的代碼是有這個查詢嗎? –