Eu quero escrever uma consulta contra o jsonb
tipo no Postgres que, dada uma matriz de IDs de clientes, encontre os grupos correspondentes.
Dada esta tabela de exemplo:
CREATE TABLE grp(d JSONB NOT NULL);
INSERT INTO grp VALUES
('{"name":"First","arr":["foo"], "customers":[{"id":"1", "name":"one"},{"id":"2", "name":"two"}]}')
, ('{"name":"Second","arr":["foo","bar"], "customers":[{"id":"3", "name":"three"},{"id":"4", "name":"four"}]}')
, ('{"name":"Third","arr":["bar","baz"], "customers":[{"id":"5", "name":"five"},{"id":"6", "name":"seven"}]}');
Encontrei uma pergunta semelhante ( PostgreSql JSONB SELECT contra vários valores ) e consegui alcançar o que quero em uma matriz simples usando esta consulta:
SELECT d FROM grp WHERE d->'arr' ?| ARRAY['foo', 'bar'];
No entanto, não consigo fazer funcionar quando array contém objetos JSON :
SELECT d FROM grp WHERE d->'customers' ?| ARRAY['{"id":"1"}', '{"id":"5"}'];
Aqui está o que eu espero da minha consulta:
grp "Primeiro" -> cliente "1"
grp "Terceiro" -> cliente "5"