繁体   English   中英

查询 jsonb 数组的部分值

[英]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的所有subscriptionsid

我尝试使用@>运算符但没有成功。

以下将返回用户订阅(类型为“项目”)的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM