2016-08-17 10 views
1

を使用する場合はequalTo(value, key)の第2引数をdocumented hereとして使用しようとしています。firebase orderByPriorityがequalToに変わった動作で使用されました

問題は、その2番目のkey引数を使用すると結果が矛盾することです。


例データセット

items 
    key1 
    key2 
    key3 
    key4 

すべての項目は、同じ優先度を持つ:10

(これは単なる例えば、私のアプリでは、他の優先順位を持つ他の項目がある場合)

次のFirebaseクエリを発行して、その優先度を持つ最初の2つの項目を取得する場合:

dbRef.child('items').orderByPriority().equalTo(10).limitToFirst(2) 

私は次の取得 - 期待 - 結果:

{ "key1": ..., "key2": ... } 

ドキュメントで説明したようにそれから私は、key2項目の後の結果を取得しよう:

dbRef.child('items').orderByPriority().equalTo(10, 'key2').limitToFirst(2) 

結果は非常に奇妙で、常に1つのアイテム、つまり提供されたキーを持つもの:

{ "key2": ... } 

何私が期待していたこと後かで始まる二つの結果提供されるキー、そう

{ "key2": ..., "key3": ... } 

それとも

{ "key3": ..., "key4": ... } 

質問

equalTo()フィルタを2番目の引数に使用するにはどうすればよいですか?それは思える


この質問はalready askedだったが、それは

答えて

1

equalTo()フィルタは、正確に指定されたキーに一致する項目を取得します...どんな答えを取得できませんでした。 'key2'で始まり、その後に複数回取得する場合は、startAt()フィルタを使用します。ただし、同じクエリで複数のorderByステートメントを使用することはできません。そのため、コードを再フォーマットする必要があります。希望の優先度で商品を保存することをお勧めします。その後、startAt()フィルターを使用してその項目のグループを照会することができます。相続人のデータセット:startAt()フィルタでは

items10 
    key1 
    key2 
items9 
    key1 
    key2 

、あなたは起動キーを指定し、それが同じか大きい値を持つ任意のキーを照会します。この機能のためのドキュメントへのリンク:startAt()

このメソッドを使用すると、limitToFirst(2)はkey2とkey3を与えます。優先度10を使用したコード例を次に示します。

dbRef.child('items10').orderByKey().startAt('key2').limitToFirst(2) 

注:要素を優先順位を知らずに取得するだけでよい場合もあります。このためには、すべてのキーだけを含むitemという別のキーを作成します(これはクエリには使用しません)。

+0

それは動作しません: 'Error:Query.orderByKey:複数のorderBy呼び出しを組み合わせることはできません。 'また、 'equalTo()'フィルタはキーに一致する項目だけを取得することがわかりましたか?ドキュメントでは、「先に指定した優先順位を持つ子どもの中で、始める子供の鍵」と書かれています。 – Pandaiolo

+0

私の間違いです。私は私の記事を編集しました。 –

+0

あなたの質問に答えるには、1つの値に基づいてフィルタリングすることのみが許可されています。これはFirebaseのクエリの性質に過ぎません。 –

関連する問題