[英]Querying jsonb array for partial value
在 Rails 5.2 应用程序中, User
模型具有subscriptions
jsonb 属性
t.jsonb "subscriptions", default: [], null: false
一个例子是
irb(main):091:0> User.first.subscriptions
=> [{"id"=>"dfdaad60", "type"=>"Organization"},
{"id"=>"18616f4d", "type"=>"Project"}]
我如何使用 arel 获取type
等于Project
的所有subscriptions
的id
?
我尝试使用@>
运算符但没有成功。
以下将返回用户订阅(类型为“项目”)的ids
数组,
User.pluck(:subscriptions).flatten.map { |x| x['id'] if x['type'] == 'Project' }.compact
您不需要where
AR 或 AREL 查询,因为您只需要订阅中存在的ids
为具有“项目”的类型,并且可以如上获取。
这将做到这一点,使用自定义 SQL 语句:
sql = "SELECT value->'id' AS id FROM users, jsonb_array_elements(users.subscriptions) WHERE data @> '#{[{type: "Project"}].to_json}'"
result = ActiveRecord::Base.connection.execute(sql)
puts result.to_a
您可以使用ActiveRecordExtended gem 查找具有项目类型订阅的所有用户:
User.where.contains(subscriptions: { type: "Project" })
然后我会在 ruby 中获得 id。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.