【问题标题】:Rails/Postgres nested JSON queryRails/Postgres 嵌套 JSON 查询
【发布时间】:2016-03-08 13:03:04
【问题描述】:

我的events 表中有一个名为payload 的JSON 列。我可以像这样创建一个事件:

Event.create!(application_id: 1, stage: 'INITIATION', payload: { key: 'OUTCOME', value: {school_id: 2, prefered_language: 'GBP'}})

类似的简单查询

Event.where("payload->>'key' = ?", "OUTCOME")

可以正常工作,但是如何使用嵌套在 value 部分中的 JSON 添加额外的过滤器

 Event.where("payload->>'key' = ? AND payload ->>'value'->>'school' = ?", "OUTCOME", 2) 
                                                 ^^^^^^^^^^^^^^^^^^^^

我试过了,但我得到了:

PG::UndefinedFunction: ERROR:  operator does not exist: text ->> unknown
LINE 1: ...ad ->>'key' = 'INPUTPARAMS' AND payload ->>'value'->>'school...                                                         ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

如何进入学校属性值内?

我从 ActiveRecord 和 JSON 上的 documentation 中获得了这个想法

【问题讨论】:

    标签: ruby-on-rails json postgresql


    【解决方案1】:

    经过大量搜索,我发现了这个article

    #>> 运算符允许您深入 JSON。我的查询可以这样修复。

    Event.where("payload->>'key'= ? AND payload#>>'{value, school_id}' = ?", 'OUTCOME', shcool_id)
    

    理论上,您可以通过将每一层添加到谓词块{value, school, next_level, and_so_on} 来进一步降低

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2018-07-09
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      相关资源
      最近更新 更多