2017-02-09 7 views
0

私は発注ツールを構築しています。各注文にはidがあり、pushメソッドを使用してFirebaseから取得する一意の識別子です。私の質問です:私は、 "検索"というタイトルの横にあるボタンで私のページに "オーダー"とラベルが付いたテキストフィールドを置くとしましょう。Firebaseデータベース:特定のアイテムを検索

そのデータを取得する(および場合によっては構造化する)にはどのような方法が最適ですか?私はFirebaseデータベースのインデックス作成に精通しています。基本的に、私は特定の注文を検索できるようにしたい。それらの何千ものがある可能性があります。以下は適切ですか?

var wantedOrder = firebase.database().ref('orders').equalTo("My Input Text");

"orders": { 
    "abc123456": { 
     "name": "My First Fake Order", 
     "members": { 
     "alovelace": true, 
     "ghopper": true, 
     "eclarke": true 
     }, 
    "abc123457": { 
     "name": "My Second Fake Order", 
     "members": { 
     "alovelace": true, 
     "ghopper": true, 
     "eclarke": true 
     } 
    }, 
    ... 
    } 

Firebaseルールは

{ 
    "rules": { 
    "orders": { 
     ".indexOn": ["name"] 
    } 
    } 
} 
+2

あなたは直接equaltoを使用することはできません....あなたはその前に注文して*()メソッドを適用する必要があります – Kushan

答えて

2

あなたはequalTo()startAt()endAt()前に機能のORDERBY *()タイプを必要としています。あなたは、より柔軟な方法を持って使用したい場合は、あなたの特定のケースで

、私は....これは、検索の完全一致を返します

var wantedOrder = firebase.database().ref('orders').orderByChild('name').equalTo('yourText').on(listener you want.....) 

を使用しstartAt()endAt()

+0

電話に申し訳ありません...インデントを助けることができませんでした – Kushan

+0

私は、 firebaseのルールに '$ order'を追加します。もしうまく動作しなければ、私は元に戻ります。 TY –

+0

あなたのルールは大丈夫です...あなたが呼び出したメソッドは間違っていました...それはあなたを助けるfirebaseドキュメントの高度なクエリにもっと調べてください。 – Kushan

0

私はあなたが捜しているものを達成するための2つの方法を提案することができます。

  1. (非常に効率的ではない、あなたは、巨大なデータを持っている場合)あなたは、検索キーワードのデータのすべてのセットの上に「受注」ノードと、ループのValueEventListenerを通じて全データを取得することができます。

  2. あなたのデータセットと似たようなデータセットを持っています。 Querying firebase through substring

関連する問題