Firestoreの次のリリースで新しいクエリが追加されるようだ。(ソース: feat: Add IN queries support (blocked) by thebrianchen · Pull Request #715 · googleapis/nodejs-firestore · GitHub)具体的には
- 指定された値のどれかに一致するドキュメントを選ぶ
IN
クエリ ARRAY_CONTAINS
のIN
版であるARRAY_CONTAINS_ANY
クエリ
が使えるようになるらしい。
つまり、IN
クエリは、
collection.add({ a: 10 }) collection.add({ a: 20 }) collection.add({ a: 30 })
のようなコレクションに対して行うと
collection.where('a', 'in', [10, 20])
[ { a: 10 }, { a: 20 } ]
こんな感じの結果が返ってくるクエリで、指定した値(10, 20)のどれか1つにでも一致していればマッチする(はず)。
ARRAY_CONTAINS_ANY
クエリは、
collection.add({ array: [ 10, 20 ] }) collection.add({ array: [ 20, 30 ] }) collection.add({ array: [ 30, 40 ] })
のようなコレクションに対して行うと
collection.where('array', 'array-contains-any', [ 10, 20 ])
[ { array: [10, 20] }, { array: [ 20, 30 ] } ]
のような結果が返ってくるクエリ(のはず)。
何に使えるの?
今までFirestoreになかったOR条件を記述できるクエリなので、応用範囲はかなり広いと思った。
例えば、SNSの実装で、投稿に投稿したユーザーのidやReferenceを持たせて、それをIN
クエリで検索することでホームタイムラインやリストの実装をすることができる。
不確定事項
これらのクエリはPRとして出ているだけで、実際にmasterに入ったわけでも、今デプロイされているFirestoreに実装されているわけでもないので、突然なかったことになる可能性もある。。
また入ったとして、それらがどれくらい他のクエリと組み合わせられるのか(ARRAY_CONTAINS
のように一度だけしか使えないのか、インデックスを定義すれば複数回使えるのか)は今のところ不明。
続報を楽しみに待ちたい。