[英]Querying rails active record based on jsonb column
我有一個名為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"
。
我怎樣才能做到這一點?
嘗試,
User.where("settings @> ?", {uuid5: {label: 'Email', value: 'example@test.com.tw'}}.to_json)
有關更多參考,請參閱
https://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails
感謝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
方法。 我剛注意到你沒有指定你的數據庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.