2017-03-13 1 views
1

AgularFire2でクエリを実行しています。特定のプロパティを持つ項目を検索します(値は重要ではなく、いくつかの値が十分です)startAtの空の文字列を使用して、期待どおりに動作します。AngularFire2のリストで、null以外の値とオプションの「key」パラメータを持つ利用可能な項目を照会します

ベータ8は、クエリ(startAtendAtequalTo)で「オプションのキーの値を」使用することができますので、私は与えられたkeyから始めて、特定の要素だけを取得したいです。ここで

は一例です:

[ 
    {"$key": "a", "email":"[email protected]","name":"Alice"}, 
    {"$key": "b", "email":"[email protected]","name":"Bob"}, 
    {"$key": "m", "name":"Malory"} 
] 

このクエリは唯一の "ボブ" を返しますが、両方のボブ&アリスはありません。ここで

query: { 
     startAt: { value: '', key: 'b'}, 
     orderByChild: 'email' 
    } 

Plunkrです。

UPDATE:(私が達成したいものを明確にする例)

は、我々のDBにリストdealersを持っていると仮定し、各ディーラーは彼らの在庫(トラック、バスでvehiclesの一つ以上の種類があり、車など):dealers/{dealerUid}/inventory

私は最初に深いパス(例:orderByChild: 'inventory/cars')で試してみましたが、予期しない動作を見ますが、最初のレベルのクエリでも同じことが起こります。 (私は彼らのインベントリに車を持っているディーラーを取得したいが、すべてのディーラーが在庫に車を持っていない、いくつかのUID({dealerUid})から始まると仮定します。

どちらか私が何か間違ったことをやっているか、バグがある。

答えて

1

オプションのキーが指定された値の複数の一致を区別するために使用されてSDK documentationから:。

オプションのkey引数は、さらに、クエリの範囲を制限するために使用することができ、それが指定されている場合は、その後、子供たち。指定された値とまったく同じキー名も指定されたキー以上でなければなりません。

あなたはので、すべての子どもたちが返され、指定したソート後、データベース内の指定した値と値のすべてのためのマッチを持っていません。

予想される動作です。

+0

実際には、最後に返された子は 'email'を持っていません。その子供の包含はバグかもしれない。私は空の文字列の前に 'null'をソートするべきだと思っていたでしょう。 – cartant

+0

いいえ、私はすべての利用可能な要素を表示するだけで、この投稿にその子供をコピーしました。あなたは正しい、これは期待される。私の間違い。 – Bogac

+0

これはFirebase SDKの有効な動作ですが、空文字列は特別な場合と考えてください。 'startAt' /' endAt'に空文字列と指定されたキーの両方がある場合は、キーはさらに使用可能な値ではありません。あなたは機能リクエストを開いた方がいいと思いますか? – Bogac

関連する問題