ruby-on-rails - 如何按散列值在 JSON 散列数组中进行搜索?

标签 ruby-on-rails json ruby postgresql

我正在使用 Postgres 的 JSON 数据类型来存储一些信息。

例如,我有一个模型 User,它有一个字段 locations,它包含一个 json 文档(包含键和值对的对象数组),格式如下:

[{"name": "Location 1", kind: "house"},
 {"name": "Location 2", kind: "house"},
 {"name": "Location 3", kind: "office"},
 ...
 {"name": "Location X", kind: "house"}
]

我想用 .where 查询 JSON 数据类型。

我想查询至少有一个位置为 kind = office 的用户。

谢谢!

最佳答案

I want to query for users that have locations with kind office

# if locations is jsonb type
User.where('locations @> ?', { kind: 'office' }.to_json)
# if locations is json type
User.where("locations->>'kind' = 'office'")
# if locations is array of hashes
User.where('locations @> ?', [{ kind: 'office' }].to_json)

关于ruby-on-rails - 如何按散列值在 JSON 散列数组中进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39895445/

相关文章:

ruby - 使单元测试快速失败以进行突变测试

ruby-on-rails - Rails Cart 销毁时返回产品数量

javascript - Rails - 使链接与 ajax 一起工作

ruby-on-rails - Rails - 一个用户多个地址

javascript - 如何将新状态保存到本地json

json - postgresql 使用 LIKE 运算符在 json 数组中选择行

ruby-on-rails - Rails 中的 OO 设计 : Where to put stuff

javascript - 如何使用jquery的ajax方法将json字符串传输到另一个页面?

ruby - 寻找可以在指定时间运行作业的作业队列

ruby - 为什么我的 BigDecimal 计算器输出的值不正确?