Hasura GraphQLで、配列にある値を含むレコードのみでフィルタする

概要 HasuraはバックエンドにPostgresQLを持つGraphQLサーバーです。PostgresQLのテーブル要素に配列があった場合にSQLであれば@>といった演算子でフィルタします。Hasura GraphQLにおいても同等のことができましたのでレポートします。 フィルタ方法 例えばmytableのmyarrayカラム(型はjsonb)に以下のようなデータが入っていたとします。 id: 1, myarray: ['foo', '1', '2'] id: 2. myarray: ['3', '4'] id: 3. myarray: ['5', 'foo'] 例えばid=1のmyarrayカラムには['foo', '1', '2']というjsonbが入っている状態です。 ここでmyarrayにfooが入っているレコードだけを引いてきたいとします。その場合のクエリは以下のとおりです。 query MyQuery { mytable(where: {myarray: {_contains: "foo"}}) { id } } これで1,3のレコードを取得できます。HasuraのUI上から見る限りですとjson型ではcontainsオペレータが存在しません。公式ドキュメントでもJSONB Operatorと述べられている通り、jsonb限定の機能のようです。

December 22, 2021 · 1 min · Me