概要
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限定の機能のようです。