2017-07-10 7 views
0

私はFirebase DBにクエリを実行し、Firebase:ベストマッチのためのクエリが

は、だから私は、コード内でこのような何かを持っていない完全一致ベストマッチを取得したい結果。

// Create the ref people in the DataBase 
    var people = admin.database().ref('/People'); 

people.orderByChild("mCalculateLeftEyeSizeWidth").equalTo(mCalculateLeftEyeSizeWidth()).on("child_added", function(snapshot) { 
         console.log(snapshot.key); 
        }); 

この現在のクエリは完全一致のために、私は二重の値
(値の例:14.212670403551895)で取り扱っておりますです、私に完全一致を与えることはありません が、私は最高の試合を取得したいです。その数値に近い値、どうすればいいですか?

答えて

0

あなたは要求された幅以上との最初のノードを取得するためにstartAt()、その後limitToFirst(1)を使用することができます。

people.orderByChild("mCalculateLeftEyeSizeWidth") 
     .startAt(mCalculateLeftEyeSizeWidth()) 
     .limitToFirst(1) 
     .on("child_added", function(snapshot) { 
    console.log(snapshot.key); 
}); 

をしかし、それは要求された値よりも小さい幅を持つアイテムを返すことはありません。 endAt().limitToLast():あなたは正反対のことをすることができ、それらを得るために、私はこれらの2つのクエリを結合する方法はないと思う

people.orderByChild("mCalculateLeftEyeSizeWidth") 
     .endAt(mCalculateLeftEyeSizeWidth()) 
     .limitToLast(1) 
     .on("child_added", function(snapshot) { 
    console.log(snapshot.key); 
}); 

を。

+0

これはうまくいきましたが、今では私は と一致させたい14のプロパティを持っていますが、これは唯一のものです。 14個のキーすべてにインデックスを付ける必要がありますか?クエリについてはどうですか?一致する値の数に制限はありますか? –

0

Firebase APIのstartAt()endAt()の方法を組み合わせることで、結果をε値で制限できます。

people.orderByChild(...).startAt(yourMethod()-epsilon).endAt(yourMethod()+epsilon).on(...); 
+0

what -epsilonの意味がわかりません。 エプリソンの代わりに、-5 +5でこのようなことをしました。 ログに警告があります。 FIREBASE WARNING:不特定のインデックスを使用しています。パフォーマンスを向上させるには、セキュリティルールに "/indexOn": "mCalculateLeftEyeSizeWidth"を/ Peopleに追加することを検討してください。私はそれを定義する必要があると仮定します。 –

+0

イプシロンは、範囲を設定するための小さな値を意味していました。あなたはそれを5回使用しました。この警告はセキュリティとパフォーマンスを目的としており、https://firebase.google.com/docs/database/security/indexing-data –

0

私が正しくあなたの質問を理解していれば、あなたはmCalculateLeftEyeSizeWidth()の値から始まる子プロパティを持つすべてのオブジェクトを見つけたいです。残念ながら、Firebaseはこの時点で多くのクエリ機能を備えていません。

firebase「way」は、データベース全体をダウンロードして、それに照会することです:https://firebase.google.com/docs/reference/js/firebase.database.Reference。小さなデータセットでも問題なく動作しますが、何百ものレコードがある場合や、さらにパワーが必要な場合は、MongoDBやParseをお勧めします。

+0

こちらをご覧ください。 これは私が雲の中でFirebaseを選択した理由です:-) –

+0

悲しいことに、私が述べたように、あなたがFirebaseで提案している非常に強力なクエリを行うことはできません。この時(2017年7月)。 – wilsonhobbs

関連する問題