rails:使用正则表达式查询JSONB列

时间:2017-05-24 04:40:19

标签: sql ruby-on-rails postgresql-9.1 jsonb

我正在尝试将JSONB对象与正则表达式匹配。

我有一个rails应用程序(与此不同)。我有2张桌子和宠物。一个房子有很多宠物。我的Pet表有一个名为pet_description的JSONB列,其中包含宠物类型和性别的键值对,如下所示:

col1   col2  Col3
 10     3      0  
 21     4      0  
 15     17     0  
 22     16     1  
 09     96     1  
 07     78     1    
 23     17     2    
 24     10     2  
 24     20     3  

此目的的迁移文件是:

{ 
  "dog"=>"male", 
  "cat"=>"female", 
  "parrot"=>"male"
}

在我的House模型中,我有一个执行SQL查询的查询。如果我这样查询找到所有有宠物的房子,它就有用。

class AddPetDescriptionToPets < ActiveRecord::Migration
  def change
    add_column :pets, :pet_description, :jsonb, default: {}
    add_index  :pets, :pet_description, using: :gin
  end
end

以上工作正常。

我也可以查询匹配字符串:

self.where("EXISTS ( SELECT null FROM pets WHERE pets.house_id = houses.id)")

但我希望查询能够使用正则表达式&#39; fem | emal&#39;,这不起作用。请帮忙,我在这里做错了什么。

self.where("EXISTS (
    SELECT null 
    FROM pets WHERE pets.house_id = houses.id 
    AND pets.pet_description ->> 'cat' ~ 'fem' )")

感谢, 格雷格

0 个答案:

没有答案