2017-02-21 5 views
0

私はFirebaseを使っていましたが、データを非正規化しておくようにしてください。私の唯一の問題は、複数のコレクションを照会する最良の方法を考え出すことです。またFirebaseで複数のコレクションを照会する

studios: { 
    $studio: { 
    name: string, 
    owner: $identityID, 
    location: $locationID 
}} 

は、このオブジェクトは、所有者を参照し、その場所:Studioのオブジェクトに対応

identities: { 
    $identity: { 
    name: string, 
    studio: $studioID 
}} 

:たとえば、私は、Identity私のユーザーに情報を保持するオブジェクトを持っています。ロケーションオブジェクトはClassesを参照し、これはStudents .... onとonを参照します。今、参照されたオブジェクトを取得するために、私はこのような何かをやっている:

Auth.loginUser(email, password, (success) => { 
    const identityRef = firebase.database().ref('/identity'); 
    identityRef.child(success.uid).on("value", function(identitySnapshot) { 

     const identity = identitySnapshot.val(); 
     const studioRef = firebase.database().ref('/studios'); 

     dispatch({type: 'UPDATE_IDENTITY', identity}) 

     studioRef.child(identity.studioID).on("value", function(studioSnapshot) { 

     const studio = studioSnapshot.val(); 

     dispatch({type: 'UPDATE_STUDIO', studio}); 
    })}); }); 

私はなど、場所、クラス、学生のための私の呼び出しを入れ子に続けるだろうこれを行うには良い方法はありますか?

答えて

0

は、以下の構造を考えてみましょう:

identities: { 
    $identityKey: { 
     name: string 
    } 
} 

identities_studios: { 
    $identityKey: { 
     $studioKey: { 
      name: string 
     } 
    } 
} 

identities_studios_locations: { 
    $identityKey: { 
     $studioKey: { 
      $locationKey: { 
       lat: string, 
       lng: string 
      } 
     } 
    } 
} 

まず、identitiesは、唯一のいつものようにアイデンティティに関する情報を格納します。

第2のidentities_studiosは、スタジオに関する情報のみを格納しますが、スタジオは$identityKeyでグループ化されています。

第3のidentities_studios_locationsは、ロケーションに関する情報のみを格納しますが、最初に$studioKey、次に$identityKeyでグループ化されています。

今、あなたがこれを行うことができます。その代わり、他の後に複数の要求を1つずつ作る

const db = firebase.database() 

Auth.loginUser(email, password, success => { 
    db.ref(`/identities/${success.uid}`).on("value", snap => { ... } 

    db.ref(`/identities_studios/${success.uid}`).on("value", snap => { ... } 

    db.ref(`/identities_studios_locations/${success.uid}`).on("value", snap => { ... } 
} 

を、我々は彼らが同時に実行するために得ます。

この情報をすべてデータベースから取得した後、IDの配列、スタジオの配列、場所の配列など、必要なデータ構造に変換することができます。ネストされたスタジオとネストされたスタジオとのアイデンティティの単一の配列があります。

+0

時間をとっていただきありがとうございます!私が持っている唯一の問題は、データが別の「コレクション」に入っていても、依然としてつながっていることです。すべてが特定のuidに束縛されているので、同じデータを複数のユーザーとどのように共有できますか?物を別のコレクションに分割する理由は、それを複数のエンティティで使用できるようにすることです。 – Dabellator