Rails Postgres过滤jsonb数组中的jsonb对象

时间:2016-10-18 23:45:07

标签: ruby-on-rails postgresql activerecord jsonb

假设我有一个模型Neighborhood,它有一个jsonb []字段families,这是一个包含json对象的数组,其中任何类型的键值配对都是这样的[{"name":"Smiths", "count":4}, {"name":"Miller","out_on_vacation":false}, {"name":"Bennet", "house_color":"red", "count": 4}]

我想做一个activerecord查询来查找在families数组中包含某些对象的邻域的邻域。 因此,如果我执行Neighborhood.where({families: {count: 4})之类的操作,结果将是任何邻域模型,其族字段包含一个jsonb对象,其键值配对为count: 4。我玩了很多不同的查询,但似乎无法让任何一个查询工作而不会收到错误。我如何编写Activerecord查询以获得所需的结果?

修改 我像这样进行了迁移:

def change 
  add_column :neighborhoods, :families, :jsonb, array: true, default: [], index: true 
end

1 个答案:

答案 0 :(得分:0)

我相信你会这样做:

Neighborhood.where("families -> 'count' ? 4")

本文可能对您有所帮助:http://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails

编辑:刚刚注意到你在jsonb里面有一个数组,所以这可能不起作用。

编辑2:这在Reddit上得到了回答,并为我工作。在这里回答作为我自己的参考。

Neighborhood.where %q(families @> '[{"count":?}]'), 4