rails AR查询使用postgres json数据类型

时间:2015-12-11 23:42:07

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

我的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'])

2 个答案:

答案 0 :(得分:0)

好的,这就是我found

  

基于JSON文档的查询

     

- > operator返回原始JSON类型(可能是对象),而 - >>返回文字

此外,这post可能就是您所寻找的。

也许尝试像

这样的东西
ModelName.where("changes->>'margin' > -1")

答案 1 :(得分:0)

答案:

ModelName.where("changes -> 'data' -> 1 ? 'margin'")

查询逻辑类似于changes字段中的...,移动到对象data,获取第二个元素(基于零的索引),看它是否包含名为{{1}的键}。