【发布时间】:2016-05-20 18:55:00
【问题描述】:
这是对这个问题的后续问题:
How to select only part of json, stored in Postgres, with ActiveRecord
假设我有一个模型User,它有一个类型为json 的字段,称为settings。假设该字段大致如下所示:
{
color: 'red',
language: 'English',
subitems:
{
item1: true,
item2: 43,
item3: ['foo', 'bar', 'baz']
}
}
与上面引用的问题不同的是,我想知道如何排除部分 json。所以在这里,我想从settings 中选择所有内容,除了:
subitems:
{
item1: true,
item2: 43,
item3: ['foo', 'bar', 'baz']
}
【问题讨论】:
-
比相关问题复杂得多:] 使用两个查询的解决方案是否适合您?第一个查询获取所有顶级 json 键,第二个查询实际选择您希望排除的所有字段。
-
嗯,实际上,我不介意手动选择所有需要的键。所以我需要类似:
User.select("settings -> ['color', 'language'] AS modified_settings"),它应该返回对象,响应方法modified_settings,它应该返回{color: 'red', language: 'English'}。你知道如何一次选择多个键吗? -
不幸的是,我也可以找到一种同时检索多个密钥的方法。但是您始终可以使用
keys_to_fetch.map{ |k| "setting -> '#{k}' as setting_#{k}"}.join(',')之类的内容动态构建查询 -
好的,谢谢。我认为这是一个很好的解决方法!
标签: ruby-on-rails json postgresql activerecord