【发布时间】:2018-04-30 13:19:11
【问题描述】:
我正在使用 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"}]>,
【问题讨论】:
-
你需要
downcase双方:where('lower(features) @> ?', [{ value: value.downcase }].to_json)。为了提高性能,我建议您在写入时使用downcasevalue(+ 迁移当前数据),以便稍后您可以假设features的JSON 中的每个value都是小写的。
标签: ruby-on-rails postgresql ruby-on-rails-5 jsonb