2016-06-25 15 views
0

にキーでオブジェクトをルックアップ私は自分のアプリケーションで、以下のデータ構造を使用しています:Firebase

var users = { 
    "tom": { conversations: ["fake-uuid-v4"] }, 
    "bob": { conversations: ["fake-uuid-v4"] } 
}; 

var conversations = { 
    "fake-uuid-v4": { 
    user_one: "tom", 
    user_two: "bob" 
    } 
} 

各ユーザーは、会話のためのデータが含まれている会話にキーマッピングのコレクションを持っている、など最後に送信されたメッセージとして、ユーザーが入力している場合などです。この問題は、会話を参照するのが非常に難しいことです。

これは私が試したことですが、結果は得られません。 (注:私は今、私のfirebaseアプリケーションでこの正確なデータを持っているので、これは技術的に実行可能な例である)私は

にコードを変更した場合、それは、データベースから何かを引っ張っていないしかし

var conversation_id = 'fake-uuid-v4'; 
firebase.database().ref('/conversations') 
    .startAt(conversation_id) 
    .endAt(conversation_id) 
    .on('child_added', function(snapshot, prevKey) { 
     if(snapshot.val()) console.log(snapshot); 
}); 

firebase.database().ref('/conversations/'+conversation_id).on('child_added', function(snapshot, prevKey) { 

}); 

そして、それは会話のための各キー/値を出力しますが、この場合には、追加:

tom 
bob 

は、どのように私はすべてのCを監視することができますユーザーの会話の配列に格納されているキーを使って逆転しますか?あなたの最初のスニペットは動作しません理由について

+0

私は本当に質問を理解していません。ユーザーの会話IDと各会話の読み込みに問題がありますか? –

答えて

1

クイック「答え」:

var conversation_id = 'fake-uuid-v4'; 
firebase.database().ref('/conversations') 
    .startAt(conversation_id) 
    .endAt(conversation_id) 
    .on('child_added', function(snapshot, prevKey) { 
     if(snapshot.val()) console.log(snapshot); 
}); 

あなたはデータの可能性が高い優先順位によってされていることを意味し、順序を指定していません。しかし、あなたは子供に直接アクセスすることができる間にクエリを構築しているので、とにかくこのアプローチに反対することをお勧めします(これは、より高速になります)。

+0

問題は 'ref(..)。child(conversation_id).on( 'child_added''は対話のためにオブジェクト内の各キーと値のペアを返します)配列のすべての会話を聞く必要があります。たとえば、 'child'と' console.log(snapshot.val()) 'を使って 'conversation'オブジェクト全体を返す' child_added'を持つ方法は、 'tom'を出力し、' bob'を出力します。 {user_one: 'tom'、user_two: 'bob'} ' – Hobbyist

+0

私は他のユーザーの会話に関するデータを取得するため、すべての会話を聴きたくないので、 "x"のIDを持つ会話Tl; dr、会話のKVPだけでなく、会話全体にchild_addedが必要です。 – Hobbyist

+1

'.on( 'value'、...'? –