Postgres JSONB多个属性匹配

时间:2019-06-24 01:54:23

标签: 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

我尝试了两个属性,但没有用:

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

我想念什么?我根据文档应该能找到

1 个答案:

答案 0 :(得分:1)

删除lower()@>区分大小写。

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

如果要使其不区分大小写,请在JSON的文本值上使用lower()并将所有属性都以小写形式匹配(或也可以应用lower()

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

DEMO