私はJSONBカラムにデータを格納するテーブルを持っています。JSONBデータでPostgresテーブルを照会する
ここでは、そのテーブルをクエリし、キーの特定の値を持つレコードを取得します。
SELECT "documents".*
FROM "documents"
WHERE (data @> '{"type": "foo"}')
をしかし、私は何をしたいタイプfoo
OR bar
を持っているテーブル内のすべての行をフェッチ、次のとおりです。
これが正常に動作します。
私はこの試みた:
SELECT "documents".*
FROM "documents"
WHERE (data @> '{"type": ["foo", "bar"]}')
をしかし、これは動作するようには思えません。
また、私はこれを試してみました:
SELECT "documents".*
FROM "documents"
WHERE (data->'type' ?| array['foo', 'bar'])
働くが、私はそれは、クエリの動的性を奪うのでdata->'type'
のようなキーを指定した場合。
私はRuby on RailsをPostgresで使用していますので、すべてのクエリはActiveRecord
です。それは、クエリの動的性を奪う>「型」 - 私は、データのようなキーを指定した場合
Document.where("data @> ?", query)
応答@klinありがとうございます。ソリューション1は動作しますが、私は他の方法を考えていました.RailsはAPIの一部であり、何らかの要求があり、paramsを解析する必要はありません。これは基本的な操作なので、そこにいるはずのクリーナーな方法を考えていました。どう思いますか? –
私はあなたが何を意味しているのか知っています。それが私が2番目の解決策について書いた理由です。クリーナーはありません。 – klin
ええ、属性は変更できますが、必ずしも型になるとは限りません。したがって、構文解析が行われます。 –