フロントエンドの地獄

みせてやりますよ。本当の地獄ってやつをね。

FirebaseのFirestoreに便利なクエリ「array-contains-any」ってのができたからサンプルサイトとともに解説するぞ!

前から噂されていた便利クエリ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の両方が実行できます。

リポジトリはこちら。

github.com

まとめ

今の所使える条件はarray-containsと同じ感じなのですが、Algoliaなどを使わずとも検索が作れる範囲が広がったので、重宝しそうです!

以上!はてぶをよろしく!笑