Postgresql Postgres JSONB多属性匹配

Postgresql Postgres JSONB多属性匹配,postgresql,jsonb,Postgresql,Jsonb,假设我有一个JSONB对象,如下所示: {"First":"Joe", "Last":"Smith", "Age": "29", "cat":"meow"} 如果只搜索以下内容,我希望能够找到此JSONB对象: {"First":"Joe", "Age":"29"} 我用一个属性尝试了这一点,它成功了: SELECT * FROM mytable WHERE name @> lower('{"First": "Joe"}')::jsonb 我尝试了两个属性,但都不起作用: SELEC

假设我有一个JSONB对象,如下所示:

{"First":"Joe", "Last":"Smith", "Age": "29", "cat":"meow"}
如果只搜索以下内容,我希望能够找到此JSONB对象:

{"First":"Joe", "Age":"29"}
我用一个属性尝试了这一点,它成功了:

SELECT * FROM mytable WHERE name @> lower('{"First": "Joe"}')::jsonb
我尝试了两个属性,但都不起作用:

SELECT * FROM mytable WHERE name @> lower('{"First": "Joe", "Last":"Smith"}')::jsonb
我错过了什么?根据文档,我认为这样应该可以删除
lower()
@>
区分大小写

SELECT * FROM mytable WHERE name @> '{"First": "Joe", "Last":"Smith"}'::jsonb
如果要使其成为不区分大小写的搜索,请对JSON的文本值使用
lower()
,并将所有要匹配的属性都用小写字母表示(也可以是apply
lower()


什么不起作用?你收到错误了吗?我在postgres 11中尝试了你的查询,结果似乎很好。我没有得到预期的结果
SELECT * FROM mytable WHERE lower(name::text)::jsonb 
        @> '{"first": "joe", "last":"smith"}'::jsonb