postgresqlpostgresql-9.4jsonb

Postgres jsonb 'NOT contains' operator


I'm experimenting with postgres jsonb column types, and so far so good. One common query I'm using is like this:

select count(*) from jsonbtest WHERE attributes @> '{"City":"Mesa"}';

How do I reverse that? Is there a different operator or is it simply used as

select count(*) from jsonbtest WHERE NOT attributes @> '{"City":"Mesa"}';

Solution

  • Two way, you can test any json(b) value

    Simply and quick way:

    NOT (attribute @> '{"City":"Mesa"}'::jsonb)
    

    I've change attribute->>'City' <> 'Mesa' to NOT (attribute @> '{"City":"Mesa"}'::jsonb) and my ~2.000.000 rows query result time changed 45secs to 25secs.