在 JSONB 数组字段中使用不区分大小写的方式搜索具有特定值的所有记录
Search for all records that have a particular value using case insensitive in a JSONB array field
我正在使用 postgres 数据库并尝试查询此 JSONB 字段中包含 "Value"=>"Black" 的所有记录。该字段包含一个对象数组,例如{"id"=>"1", "key"=>"size", "value"=>"P"}
如何查询(不区分大小写)这条记录?
到目前为止,这是我的代码
def by_feature_value(value)
relation.where('features @> ?', [{ value: value }].to_json)
end
记录
#<ProductSku:0x000055de9cc01ba8
id: 33,
product_id: 3,
code: "1234",
ean: "12345",
created_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
updated_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
features: [{"id"=>"2", "key"=>"Color", "Value"=>"Black"}]>
#<ProductSku:0x000055de9cc01ba8
id: 33,
product_id: 3,
code: "1234",
ean: "12345",
created_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
updated_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
features: [{"id"=>"2", "key"=>"Color", "Value"=>"black"}]>,
正确答案是
ProductSku.where('lower(features::text)::jsonb @> lower(?)::jsonb', [{ Value: value }].to_json)
没有类型转换,您的 post 上的第一条评论不起作用。
我正在使用 postgres 数据库并尝试查询此 JSONB 字段中包含 "Value"=>"Black" 的所有记录。该字段包含一个对象数组,例如{"id"=>"1", "key"=>"size", "value"=>"P"}
如何查询(不区分大小写)这条记录?
到目前为止,这是我的代码
def by_feature_value(value)
relation.where('features @> ?', [{ value: value }].to_json)
end
记录
#<ProductSku:0x000055de9cc01ba8
id: 33,
product_id: 3,
code: "1234",
ean: "12345",
created_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
updated_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
features: [{"id"=>"2", "key"=>"Color", "Value"=>"Black"}]>
#<ProductSku:0x000055de9cc01ba8
id: 33,
product_id: 3,
code: "1234",
ean: "12345",
created_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
updated_at: Mon, 30 Apr 2018 11:47:00 UTC +00:00,
features: [{"id"=>"2", "key"=>"Color", "Value"=>"black"}]>,
正确答案是
ProductSku.where('lower(features::text)::jsonb @> lower(?)::jsonb', [{ Value: value }].to_json)
没有类型转换,您的 post 上的第一条评论不起作用。