【问题标题】:rails AR query filtering records using postgres json data typerails AR查询使用postgres json数据类型过滤记录
【发布时间】:2016-03-18 00:07:14
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    好的,这就是我found

    基于 JSON 文档的查询

    -> 操作符返回原始 JSON 类型(可能是一个对象),而 ->> 返回文本

    另外,post 可能就是您要找的。​​p>

    也许可以试试

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

    【讨论】:

    • 感谢您的信息。经过一些实验,我想出了如何做到这一点。
    【解决方案2】:

    答案:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 2014-04-10
      • 1970-01-01
      • 2016-06-06
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多