Datastore モードの Firestore が IN、NOT_IN、NOT EQUAL クエリ演算子に対応
Google Cloud Japan Team
※この投稿は米国時間 2022 年 7 月 8 日に、Google Cloud blog に投稿されたものの抄訳です。
Datastore モードの Firestore で IN、Not IN、Not Equal 演算子を使用できるようになりました。
IN 演算子
Datastore モードの Firestore で IN 演算子を使用できるようになりました。IN 演算子を使用すると、特定のフィールドを複数の値(最大 10 個)でクエリできます。クエリを実行するすべての値のリストを渡すと、Datastore モードの Firestore がそれらの値のいずれかに一致するフィールドのエンティティを探します。
たとえば、Orders という種類のエンティティがあるデータベースで、どれが “delivered” または “shipped” ステータスになっているかを確認するには、次のようなクエリを実行できます。
例:
SELECT * FROM Orders WHERE status IN ARRAY(“delivered”, “shipped”)


他の例も見てみましょう。たとえば、Orders に Category というフィールドがあり、注文された商品が属する一連のカテゴリが含まれている場合、探しているカテゴリに対して IN クエリを実行できます。
例:
SELECT * FROM Orders WHERE Category IN ARRAY(“Home Decor”, “Home Improvements”)


この場合、クエリでエンティティが両方のカテゴリに一致した場合でも、そのエンティティは 1 回だけ返されます。
また、IN と Equal の両方で ORDER BY を使用できるようになりました。もともとクエリ プランナーでは値の順序が無視されていましたが、IN の導入に伴って、値が複数あるプロパティに対して ORDER BY クエリを活用できるようになりました。詳細については、必ず公式のドキュメントをご確認ください。
IN 演算子は、UI の新しいクエリビルダーでも使用できるようになりました。


Not IN と Not Equal 演算子
Not IN を使用したクエリを実行して、値のリストにフィールドが一致しないすべてのエンティティを見つけることができるようになりました。たとえば、Orders という種類のエンティティで status フィールドが Not IN [“shipped”, “ready to ship”] の条件に一致するものを探すことができます。
例:
SELECT * FROM Orders WHERE status NOT IN Array(“shipped”, “ready to ship”);


UI のクエリビルダーで Not IN を使用する


Not Equal を使用して、フィールドが特定の値と等しくないエンティティをクエリできるようになりました。たとえば、Orders という種類のエンティティで status フィールドの値が “pending” ではないものを探すことができます。
例:
SELECT * FROM Orders WHERE status != “pending”;


UI のクエリビルダーで Not Equal を使用する


なお、Datastore では、複数の値で Not IN または Not Equal を使用する場合、条件述部に要素が 1 つだけでも一致するものが対象となります。たとえば、Category Not IN [“Home Decor”, “Home Improvements”] という条件では、“Kitchen” と “Living Room” のカテゴリを含むため、e1 と e2 の両方が返されます。


これらの新しい追加機能をお客様の開発エクスペリエンスの向上にご活用ください。これらの新機能に関するご意見・ご感想をお待ちしています。詳細については、公式ドキュメントをご覧ください。
- Firestore ソフトウェア エンジニア Harsh Prajapati