概要

HasuraはバックエンドにPostgresQLを持つGraphQLサーバーです。PostgresQLのテーブル要素に配列があった場合にSQLであれば@>といった演算子でフィルタします。Hasura GraphQLにおいても同等のことができましたのでレポートします。

フィルタ方法

例えばmytablemyarrayカラム(型は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限定の機能のようです。