【问题标题】:Querying a nested array of hashes for existence of a key in jsonb postgres with activerecord使用 activerecord 查询嵌套的哈希数组是否存在 jsonb postgres 中的键
【发布时间】:2016-06-07 13:26:56
【问题描述】:

我在 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"})
=> []

全部返回对象失败。

我想知道我可以查询嵌套数组的元素,以了解它们在包含的哈希中是否有某些键,但我无法解决这个问题。 我显然在语法上遗漏了一些东西,但我无法弄清楚它是什么。

【问题讨论】:

    标签: ruby-on-rails json postgresql activerecord jsonb


    【解决方案1】:

    在这种情况下Model.create(settings:[{a:"b"}, {c:"d"}])

    你可以这样查询:Model.where("settings @> ?", {a: "b"}.to_json)

    【讨论】:

      猜你喜欢
      • 2022-11-12
      • 2019-03-14
      • 2022-01-02
      • 2023-04-07
      • 1970-01-01
      • 2019-06-11
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多