現在、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案が挙げられていました。
- クエリを2つ投げて、アプリレイヤーで1つの List に結合して、最後にソート
- 検索用のビューをコレクションに作る
- 検索用のビューをフィールドにArrayで作る
投稿者の方は、案3 で実装するとのことでしたが、私のプロジェクトでは、案1 が良さそうだったので、そちらを採用することにしました。
もうすでに動いているプロジェクトだったので、今からコレクションを作ったり、元のデータに項目を増やすとなると、ちょっとデータの整合性が心配で…。
あと、案1 のデメリットとして「結合やデータ取得のロジックが複雑になる」とありましたが、実際に書いてみたところ、想定よりも複雑にはならなかったので、別にこれでも大丈夫では?と思っています。
それぞれの詳しいやり方やサンプルコードについては、上記のサイトでまとめられていたので、そちらを参考にして頂ければと思います。
以上、Firebase の Cloud Firestore で orWhere() っぽくデータを取得する方法についてでした。
ご参考になれば幸いです。