用Active Record查询一个json的数组(Rails 4/postgresql9.4)
Query an array of json with Active Record (Rails 4/postgresql9.4)
我的 Deal 模型有一个名为 'info' 的属性,结构如下:
交易中 'info' 列内:
Deal1.info = [{"deal_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]
# no image here inside the json
Deal2.info =
[{"deal_id":"4","text1":"qqq","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]
该列在迁移中定义为 json
add_column :deals, :info, :json, default: '[]'
如何使用活动记录在 jsonb 中查询?
查找信息至少包含一个 deal_id = 4
的所有交易
查找信息至少包含一个 json 块 ({ }) 且密钥名为 'image1' 的所有交易(它应该只输出 Deal1,而不输出 deal2)
我有一个类似的列,我不得不将列类型从 json
更改为 jsonb
。
add_column :deals, :info, :jsonb, default: [], null: false, index: true
将数据类型设置为 jsonb
后,我能够执行这种类型的 activerecord 查询。
Info.where('deals @> ?', '[{"deal_id":"4"}]')
我不太确定如何使用 activerecord (http://www.postgresql.org/docs/9.4/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE) 编写所有这些内容以实现您的第二个要点。
我的 Deal 模型有一个名为 'info' 的属性,结构如下:
交易中 'info' 列内:
Deal1.info = [{"deal_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]
# no image here inside the json
Deal2.info =
[{"deal_id":"4","text1":"qqq","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]
该列在迁移中定义为 json
add_column :deals, :info, :json, default: '[]'
如何使用活动记录在 jsonb 中查询?
查找信息至少包含一个 deal_id = 4
的所有交易
查找信息至少包含一个 json 块 ({ }) 且密钥名为 'image1' 的所有交易(它应该只输出 Deal1,而不输出 deal2)
我有一个类似的列,我不得不将列类型从 json
更改为 jsonb
。
add_column :deals, :info, :jsonb, default: [], null: false, index: true
将数据类型设置为 jsonb
后,我能够执行这种类型的 activerecord 查询。
Info.where('deals @> ?', '[{"deal_id":"4"}]')
我不太确定如何使用 activerecord (http://www.postgresql.org/docs/9.4/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE) 编写所有这些内容以实现您的第二个要点。