我的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中获取了这个想法答案 0 :(得分:2)
经过多次搜索,我发现了article。
#>>
运算符允许您挖掘JSON内部。我的查询可以像这样修复。
Event.where("payload->>'key'= ? AND payload#>>'{value, school_id}' = ?", 'OUTCOME', shcool_id)
理论上,您可以通过将每个图层添加到谓词块{value, school, next_level, and_so_on}