2017-02-22 5 views
0

私はソーシャルアプリケーションで作業しています。私はバックエンド(API)としてFirebaseを使用しています。私はすべての希望のデータを取得するために単一のクエリを実行することができません。私のデータベース構造は次の通りです: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"と同じです...この例では、投稿に関連するアルバムやメディアについて説明しましたが、同じ方法でハッシュタグ、コメント、好きなような他のノードからデータを取得したいと考えています。

答えて

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' 

我々はfirebaseは、SQLの規則に従うする必要はそれほどのNoSQLではないことを知っているので。 この構造では、すべてのデータを1つのクエリで取得できます。

2)現在の構造に複数のクエリを書くことができます。 まずポストテーブルからデータを取得し、次に投稿IDを使用してアルバムからデータを取得し、次にアルバムIDからメディアテーブルからデータを取得できます。

+0

私は既にデータベースをセットアップしており、ほとんどの機能は既に動作しています。私はオプション2のために行きたいです。 しかし、私はfirebaseが非同期にクエリを実行するので、複数のクエリを書くいくつかの問題に直面しています。私はすべての投稿をフェッチしている時に、同じループで私は最初のpostIDと関連するデータ(Albums、Media)を得たいと思っています。そして、ループはpostID2のようにするべきです。 しかし、今起こっていることは、アルバムのクエリが同時に実行されているすべての投稿を取得している時点です。 – Daishy

+0

このクエリを実行しているコードを置くことはできますか? –

関連する問題