前から噂されていた便利クエリarray-contains-anyがついにJSのSDK等に入ったので早速使ってみます!
SDK入りたてでできたてホヤホヤのため、まだ公式ドキュメントには影も形もありません笑(2019/10/30現在)
array-contains-any ってどんなの
今までwhereにarray-containsを指定すると、arrayに特定の値が入っているdocumentを検索できました。
実際のコードはこんな感じで、testコレクションの中で「arrayフィールドの中に"A"が入っているドキュメント」を検索できます。
firebase .firestore() .collection("test") .where("array", "array-contains", "A") .get()
array-contains-anyはそれの進化版で、arrayに特定の値のいずれかの値が入っているdocumentを検索できます。
実際のコードはこんな感じで、testコレクションの中で「arrayフィールドの中に"A"か"B"のいずれかが入っているドキュメント」を検索できます。 基本的にはarray-containsと同じですが、whereの第3引数に配列を渡せます。
firebase .firestore() .collection("test") .where("array", "array-contains-any", ["A", "B"] ) .get()
そしてこの配列ののどれかが入っていれば検索にヒットします。
これでOR条件を記述できるクエリが打てるので、Firestore単体での検索の幅がグーンと広がると思います。
実際にためせるサンプルサイトも作りました
array-contains-any-sample.netlify.com
こちらで、サンプルデータにArray ContainsとArray Contains Anyの両方が実行できます。
リポジトリはこちら。
まとめ
今の所使える条件はarray-containsと同じ感じなのですが、Algoliaなどを使わずとも検索が作れる範囲が広がったので、重宝しそうです!
以上!はてぶをよろしく!笑