簡體   English   中英

查詢基於jsonb列的rails活動記錄

[英]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方法。 我剛注意到你沒有指定你的數據庫

參考https://stackoverflow.com/a/55512200/4950680

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM