ドキュメント から:
複数のwhere()メソッドを連鎖させて、より具体的なクエリを作成することもできます(論理AND)。
OR
クエリを実行するにはどうすればよいですか?例:
status
がopen
OR upcoming
status == open
OR createdAt <= <somedatetime>
OR
は、サーバーがスケーリングするのが難しいため、サポートされていません(状態をdedupに維持する必要があります)。回避策は、条件ごとに1つのクエリを2つ発行し、クライアントで重複除去することです。
「ステータス」フィールドはありませんが、ステータス関連のフィールドは、リクエストに基づいてtrueまたはfalseに更新します
{ name: "a", status_open: true, status_upcoming: false, status_closed: false}
ただし、Firebase Cloud Functionsを確認してください。次のようなステータス関連のプロパティを更新する、ステータスの変更をリッスンする機能を使用できます
{ name: "a", status: "open", status_open: true, status_upcoming: false, status_closed: false}
どちらか、あなたのクエリはちょうど
...where('status_open','==',true)...
それが役に立てば幸い。
rxjsマージ演算子を使用して2つのObservableをバインドできます。ここに例を示します。
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/merge';
...
getCombinatedStatus(): Observable<any> {
return Observable.merge(this.db.collection('foo', ref => ref.where('status','==','open')).valueChanges(),
this.db.collection('foo', ref => ref.where('status','==','upcoming')).valueChanges());
}
次に、上記の方法を使用して、新しいObservable更新をサブスクライブできます。
getCombinatedStatus.subscribe(results => console.log(results);
これがあなたのお役に立てば幸いです、チリからのご挨拶!!
ステータスにも価値を与えることを提案します。
例.
_{ name: "a", statusValue = 10, status = 'open' }
{ name: "b", statusValue = 20, status = 'upcoming'}
{ name: "c", statusValue = 30, status = 'close'}
_
ref.where('statusValue', '<=', 20)
でクエリを実行すると、_'a'
_と_'b'
_の両方が見つかります。
これにより、クエリのコストとパフォーマンスを節約できます。
ところで、すべてのケースを修正するわけではありません。
ちょうど今、同じ問題があります。幸いなことに、可能な値はA、B、C、D(4)だけなので、A || B、A || C、A || B ||のようなものを照会する必要があります。 C、Dなど
数ヶ月前のように、firebaseは新しいクエリarray-contains
をサポートしているので、配列を作成し、OR値を配列に事前処理します
if (a) {
array addObject:@"a"
}
if (b) {
array addObject:@"b"
}
if (a||b) {
array addObject:@"a||b"
}
etc
そして、すべての4!
値または多くのコンボが存在する場合でもこれを行います。
その後、クエリ[document arrayContains:@"a||c"]
または必要な条件の種類を簡単に確認できます。
したがって、4つの条件(A、B、C、D)の条件付きA
にのみ限定されるものがある場合、その配列には次のリテラル文字列が含まれます。@["A", "A||B", "A||C", "A||D", "A||B||C", "A||B||D", "A||C||D", "A||B||C||D"]
次に、これらのOR
の組み合わせについては、必要に応じてarray-contains
を検索できます(例: "A || C")
注:これは、ORと比較する可能性のある値がいくつかある場合にのみ、合理的なアプローチです。
Array-contains here の詳細は、firebase docsに新しいので