Hstore查询以在Rails上使用ruby查找与任何数组元素匹配的记录

时间:2019-06-18 13:31:35

标签: ruby-on-rails ruby postgresql rubygems hstore

我在数据库表中有一个 hstore 字段。我想编写一个查询,以使用Rails在Rails上的 hstore 字段的任何哈希中查找与任何数组元素匹配的记录。

 Users Table
 --------------------------------------------------------------------------------
        ID    Name    sectors(hstore) 

        1     Piotr   {"aviation"=>"0", "oil_and_gas" => "50", "transport" => "50"}
        2     reza    {"oil_and_gas" => "70", "energy" => "30"}
        3     pat     {"transport" => "40", "energy" => "60"}
        4     Kim     {"infrastructure" => "20", "healthcare" => "20", "industrial" => "60"}

考虑到以上测试数据,我想在hstore字段上写一个查询,以获取所有具有['oil_and_gas','energy','transport']之类的键的记录

我可以匹配并找到https://nandovieira.com/using-postgresql-and-hstore-with-rails中提到的单个扇区记录,但是我的要求是找到hstore哈希具有与数组的任何一个元素匹配的任何一个键的任何记录。

我正在使用Rails 5.1.6.2,ruby 2.5.3

1 个答案:

答案 0 :(得分:1)

可能您正在寻找以下运算符:

hstore ? key # does hstore contain key?

查询可能如下所示:

User.where("sectors ? 'oil_and_gas'")
    .or("sectors ? 'energy'")
    .or("sectors ? 'transport'")

根据postgresql docs

  

在hstore列中检查特定的密钥您可以检查特定的密钥   使用?键入hstore列WHERE子句中的运算符。对于   例如,以下语句返回所有包含attr的行   关键发布者。

SELECT
  title,
  attr->'publisher' as publisher,
  attr
FROM
  books
WHERE
  attr ? 'publisher';