leg*_*rob 6 postgresql json ruby-on-rails
我的events表中有一个名为 的JSON 列payload。我可以创建一个这样的事件:
Event.create!(application_id: 1, stage: 'INITIATION', payload: { key: 'OUTCOME', value: {school_id: 2, prefered_language: 'GBP'}})
Run Code Online (Sandbox Code Playgroud)
简单的查询,例如
Event.where("payload->>'key' = ?", "OUTCOME")
Run Code Online (Sandbox Code Playgroud)
可以正常工作,但是如何使用嵌套在该value部分中的 JSON 添加额外的过滤器
Event.where("payload->>'key' = ? AND payload ->>'value'->>'school' = ?", "OUTCOME", 2)
^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我尝试过,但我得到:
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.
Run Code Online (Sandbox Code Playgroud)
如何进入学校属性内的值?
我从这个关于 ActiveRecord 和 JSON 的文档中得到了这个想法
经过大量搜索,我发现了这篇文章。
该#>>运算符允许您深入了解 JSON。我的查询可以这样解决。
Event.where("payload->>'key'= ? AND payload#>>'{value, school_id}' = ?", 'OUTCOME', shcool_id)
Run Code Online (Sandbox Code Playgroud)
理论上,您可以通过将每一层添加到谓词块来进一步深入{value, school, next_level, and_so_on}
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |