2016-08-31 34 views
0

以下の文書があるとします。Firebaseリアルタイムデータベース:子値が存在するかどうかを確認する方法

website:{ 
    uid1:{ 
     foo:"bar", 
     username:"joff" 
    }, 
    uid2:{ 
     foo:"bar2", 
     username:"karla" 
    }   
} 

私はusernameは、すでに以下のクエリを使用して存在するかどうかを確認しようとしています。

var ref = db.ref('website'); 
var queryString = 'joff'; 

ref.orderByChild('username').equalTo(queryString).once('value', function(snap){ 
    if(snap.exists()){ 
     // exists 
     return 
    } 
    console.log('available'); 
}) 

このアプローチは、私はそれに応じてqueryStringを変更した場合、私はそれが存在するかどう私が望む結果を得る、問題なく働いています。

Firebaseのデフォルトのクエリ制限は100であり、ドキュメントに応じて好みに変更できます。

しかし、10,000というドキュメントを照会するとどうなりますか?クエリの一致が2ページ目の場合はどうなるのでしょうか?このようなデータ量はどのように処理するのですか?応答するまでに時間がかかりますか?そのようなクエリを実行する正しい方法は何か。

PS

私は厳密には上記と同じになるようにデータモデルを必要とします。

ありがとうございます。

答えて

1

equalToを使用すると「スマートな」クエリが生成されると考えられていたため、レコードが存在するかどうかを判断する上でクエリの制限は重要ではありませんでした。私は肯定的ではない。あなたが100以上のレコードを持っていることを実際に確認しましたか?あなたの 'joff'が100 +以上の注文であると、一致しません。

それは(非常に驚くべきだろう)の場合であれば、あなたはおそらく、あなたのクエリこのような何か再構築できます。

ref.orderByChild('username').startAt(queryString).endAt(queryString).once('value', function(snap){ 
    if(snap.exists()){ 
     // exists 
     return 
    } 
    console.log('available'); 
}) 

を...しかし、再び、私はそれがときに必要とされるとは思いませんequalToを使用してください。

+0

Hey!実際にあなたは正しいです。私は 'limitToFirst(100)'でそれをテストし、 'joff'は100+であったので、 'equalTo()'を使用している場合、 'limitToFirst()'関数はそれ以上重要ではないようです。データを正しくテストしていないのは残念です。ありがとうkailatech。 :) – CENT1PEDE

関連する問題