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