簡體   English   中英

使用ActiveRecord查詢哈希的嵌套數組中是否存在鍵

[英]Querying a nested array of hashes for existence of a key in jsonb postgres with activerecord

我在postgres中使用jsonb數據類型來存儲模型的各種變量設置。

使用散列似乎很簡單。

如果我創建:

Model.create(settings:{a:"b", c:"d"})
Model.where("settings -> 'a' ? 'b'") #or
=> Model...
Model.where("settings -> 'c' ? 'd'") #or if I just want to check the keys
=> Model...
Model.where("settings ? 'a'")
=> Model...

如果我使用多個鍵來做一些更復雜的事情:

Model.create(settings:{a:{b:"c", d:"e"}})

Model.where("settings -> 'a' ? 'b' ") #or
=> Model...
Model.where("settings -> 'a' ? 'd' ")
=> Model...

同樣地

現在,如果將數組放在頂層,則可以執行以下操作:

Model.create(settings:["a","b"])
Model.where("settings ? "a")
=> Model...

並返回對象。

並帶有嵌套數組。

Model.create(settings:{a:["a","b"]})
Model.where("settings -> 'a' ? 'a'")
=> Model...
Model.where("settigns -> 'a' ? :v", v: 'a')
=> Model...

但是,一旦我將任何更復雜的東西放入該數組中,我似乎就再也找不到匹配了。

Model.create(settings:[{a:"b"}, {c:"d"}])
Model.where("settings ? :v", v: {a:"b"})
=> []
Model.create(settings:{a:[{b:"c"}, {d:"e"}]})
Model.where("settings -> 'a' ? :v", v: {b:"c"})
=> []

都無法返回對象。

我想查詢一個嵌套數組的元素以了解它們包含的哈希中是否有某些鍵,但是我無法解決這個問題。 我顯然在語法上缺少某些東西,但是我無法弄清楚它是什么。

在這種情況下, Model.create(settings:[{a:"b"}, {c:"d"}])

您可以這樣查詢: Model.where("settings @> ?", {a: "b"}.to_json)

暫無
暫無

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

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