我的postgres json数据如下所示:
changes: {"data"=>[nil, {"margin"=>0.0, "target"=>0.77777}]}
字段名称为changes
,它是postgres json数据类型。
如何编写活动记录查询以检查data
具有名为margin
的密钥的行?
例如,第一条记录将被包含,而第二条记录则不包括:
# record 1
changes: {"data"=>[nil, {"margin"=>0.0, "target"=>0.77777}]}
# record 2
changes: {"data"=>[nil, {"foo"=>0.0, "target"=>0.77777}]}
我尝试了类似以下的内容,但它无效:
ModelName.where("changes -> 'data' ?| array[:keys]", keys: ['margin'])
答案 0 :(得分:0)
好的,这就是我found
基于JSON文档的查询
- > operator返回原始JSON类型(可能是对象),而 - >>返回文字
此外,这post可能就是您所寻找的。 p>
也许尝试像
这样的东西ModelName.where("changes->>'margin' > -1")
答案 1 :(得分:0)
答案:
ModelName.where("changes -> 'data' -> 1 ? 'margin'")
查询逻辑类似于changes
字段中的...,移动到对象data
,获取第二个元素(基于零的索引),看它是否包含名为{{1}的键}。