Postgres JSONB 多属性匹配

Postgres JSONB multiple attribute matches

假设我有一个像这样的 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()@>就是case-sensitive。

SELECT * FROM mytable WHERE name @> '{"First": "Joe", "Last":"Smith"}'::jsonb

如果要使其成为 case-insensitive 搜索,请在 JSON 的文本值上使用 lower() 并将所有属性以小写形式匹配(或者可以应用 lower() 也是)

SELECT * FROM mytable WHERE lower(name::text)::jsonb 
        @> '{"first": "joe", "last":"smith"}'::jsonb

DEMO