我有一个名为 User 的记录,其中有一个名为 attrs 的列。
attrs 是jsonb列。记录如下所示:
我正在发布as_json
个用户的记录。
{
"id"=>uuid1,
"profile_id"=>uuid2,
"campaign_id"=>uuid3,
"asset_id"=>uuid4,
"brand_id"=>"5",
"region"=>"Non-EU",
"attrs"=>{
uuid5=>{
"label"=>"Email",
"value"=>"example@test.com.tw"
},
uuid6=>{
"label"=>"Last Name ",
"value"=>"Yang"
}
}
}
我要查询基于
的User
有效记录
"label"=>"Email","value"=>"example@test.com.tw"
。
我该怎么做?
答案 0 :(得分:0)
尝试
User.where("settings @> ?", {uuid5: {label: 'Email', value: 'example@test.com.tw'}}.to_json)
更多参考,请参阅。
https://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails
答案 1 :(得分:0)
感谢a_horse_with_no_name
回答,这里是原始sql版本:
select u.*
from users u
where exists (select *
from jsonb_each(u.attrs) as t(uid,entry)
where t.entry ->> 'label' = 'Email'
and t.entry ->> 'value' = 'example@test.com.tw')
这是AR版本:
User.find_by_sql(["
select u.*
from users u
where exists (select *
from jsonb_each(u.attrs) as t(uid,entry)
where t.entry ->> 'label' = ?
and t.entry ->> 'value' = ?)
", 'Email', 'example@test.com.tw'])
您可以将其移至模型范围或方法。或单独查询对象。
它依赖于postgresql jsonb_each
方法。我只是注意到您没有指定数据库