我正在尝试将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' )")
感谢, 格雷格