Postgres JSONB несколько совпадений атрибутов - PullRequest
0 голосов
/ 24 июня 2019

Скажем, у меня есть объект 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 Ответ

1 голос
/ 24 июня 2019

Удалите lower(), @> с учетом регистра.

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

Если вы хотите сделать поиск без учета регистра, используйте lower() в текстовом значении JSON ипоместите все атрибуты для соответствия в нижнем регистре (или могут применяться lower() тоже)

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

DEMO

...