1. ホーム
  2. javascript

[解決済み] ファイアストア 複数の条件付き where 節

2022-02-15 10:06:36

質問

例えば、私は本のリストに対して、特定の色、著者、カテゴリーを設定できる動的フィルタを持っています。 このフィルターは、一度に複数の色と複数のカテゴリーを設定することができます。

   Book > Red, Blue > Adventure, Detective.

条件付きで "where"を追加するにはどうすればよいですか?

  firebase
    .firestore()
    .collection("book")
    .where("category", "==", )
    .where("color", "==", )
    .where("author", "==", )

    .orderBy("date")
    .get()
    .then(querySnapshot => {...

解決方法は?

API ドキュメントを見るとわかるように コレクション() メソッドは CollectionReference . CollectionReference は クエリ であり、Queryオブジェクトはイミュータブル(immutable)である。 クエリ.where() そして クエリ.orderBy() は、元の Query (変更されていない状態) の上に操作を追加した新しい Query オブジェクトを返します。 この新しい Query オブジェクトを記憶して、連鎖的に呼び出すことができるようにコードを記述する必要があります。そこで、このようにコードを書き換えることができます。

var query = firebase.firestore().collection("book")
query = query.where(...)
query = query.where(...)
query = query.where(...)
query = query.orderBy(...)
query.get().then(...)

これで、各段階で適用したいフィルタを把握するための条件式を入れることができます。ただ query を、新しく追加されたフィルターに置き換えてください。

if (some_condition) {
    query = query.where(...)
}