【Firebase】Cloud FirestoreでorWhere()っぽくデータを取得する

現在、React Native のプロジェクトで Firebase の Cloud Firestore を利用しているのですが、データを取得する時の条件で orWhere() を使いたいということがありました。
しかし、Cloud Firestore では orWhere() がサポートされていないため、別の方法で orWhere() っぽくデータを取得する必要があります。
ちなみに、React Native で Cloud Firestore を使うなら、「React Native Firebase」ライブラリを導入すればOKです。

で、調べていたところ、こちらの記事がヒットしました。

【Firestore】「orWhere」が使えない時の代案のまとめ
https://snamiki1212.com/summary-alt-plan-insted-of-orwhere-about-firestore

正に私がやりたいことと、ほぼ同じことが書いてある…!

 

上記のサイトでは、実装方法として下記の 3案が挙げられていました。

  1. クエリを2つ投げて、アプリレイヤーで1つの List に結合して、最後にソート
  2. 検索用のビューをコレクションに作る
  3. 検索用のビューをフィールドにArrayで作る

投稿者の方は、案3 で実装するとのことでしたが、私のプロジェクトでは、案1 が良さそうだったので、そちらを採用することにしました。
もうすでに動いているプロジェクトだったので、今からコレクションを作ったり、元のデータに項目を増やすとなると、ちょっとデータの整合性が心配で…。
あと、案1 のデメリットとして「結合やデータ取得のロジックが複雑になる」とありましたが、実際に書いてみたところ、想定よりも複雑にはならなかったので、別にこれでも大丈夫では?と思っています。

それぞれの詳しいやり方やサンプルコードについては、上記のサイトでまとめられていたので、そちらを参考にして頂ければと思います。

 

以上、Firebase の Cloud Firestore で orWhere() っぽくデータを取得する方法についてでした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG