2017-10-04 14 views
36

新しいFirebase Firestoreでサブコレクションを照会することができますが、例は表示されません。Firestoreの照会サブコレクション

  • ダンスを[コレクション]
    • danceName
    • ソングス[コレクション]
      • songName
:たとえば、私は次のように私のFirestoreを設定しています

どうすれば "曲名== 'X'のすべての踊りを探すか"

答えて

35

これはまだ存在しない機能です。これは「コレクショングループクエリ」と呼ばれ、どのダンスが含まれていてもすべての曲をクエリできます。これは私たちがサポートしようとしているものですが、いつ来るのかについて具体的なタイムラインはありません。

この時点での代替構造は、曲をトップレベルのコレクションにして、その曲のダンスを曲のプロパティの一部にすることです。 Nelson.b.austin @

+0

は、あなたが使用して歌からダンスを参照しますファイアストアのリファレンス?あなたはそれらの参照によって照会できますか? –

+0

Firestoreの参照を使用するかどうかはあなた次第です。あなたはそれらによって問い合わせることができます。 参照を使用してダンスをルックアップする場合は、参照のみで十分です。あなたがダンスを見上げることなく曲の中からダンスについて何かを表示できるようにしたいのであれば、私はリファレンスを使用しません。これは古典的なnosql非正規化問題です。 –

+0

私の問題は、ダンス名と曲名で質問したいのです。シングルダンスには複数の曲が関連付けられています。さらに私は、ダンスを評価することができなければなりません。例:ソングAとソングBはダンスAに行くダンスAは楽しい、5つ星 - しかし、ソングAは実際には合わない(ダウン投票)が、ソングBは(アップ)投票する。ですから、私はFirebase関数を使って、両方の平均格付けを追跡しています。しかし、私はまだWHERE songName = 'X'とwhere danceName = 'Y'を照会することができる必要があります。 Firestoreは今後これをサポートできますか? –

5

firestoreはまだ、私は意味、あなたはフラットな構造を持っていることを示唆している必要はありませんので:

そのようにそれを持って
Dances = { 
    danceName: 'Dance name 1', 
    songName_Title1: true, 
    songName_Title2: true, 
    songName_Title3: false 
} 

を、あなたはそれを成し遂げることができます。

var songTitle = 'Title1'; 
var dances = db.collection("Dances"); 
var query = dances.where("songName_"+songTitle, "==", true); 

こちらがお役に立てば幸いです。

7

曲をコレクションとしてではなくオブジェクトとして保存するとどうなりますか?フィールドとして歌と、のようにそれぞれのダンス:Object型(ないコレクション)

{ 
    danceName: "My Dance", 
    songs: { 
    "aNameOfASong": true, 
    "aNameOfAnotherSong": true, 
    } 
} 

あなたはaNameOfASongを持つすべての踊りを照会できます。

db.collection('Dances') 
    .where('songs.aNameOfASong', '==', true) 
    .get() 
    .then(function(querySnapshot) { 
    querySnapshot.forEach(function(doc) { 
     console.log(doc.id, " => ", doc.data()); 
    }); 
    }) 
    .catch(function(error) { 
    console.log("Error getting documents: ", error); 
    }); 
+0

このソリューションは機能しますが、曲の数が多い場合や動的に拡張できる場合はスケーラビリティがありません。これにより、文書のサイズが大きくなり、読み取り/書き込みのパフォーマンスに影響します。詳細については、下記のFirebaseのドキュメントを参照してください(https://firebase.google.com/docs/firestore/solutions/arraysの最後のセクション「制限事項」を参照)。 –

関連する問題