JSONB operator clarification

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема JSONB operator clarification
Дата
Msg-id 20151006001926.GA9634@momjian.us
обсуждение исходный текст
Ответы Re: JSONB operator clarification
Список pgsql-docs
In studying our JSONB operators, I was confused about what they do based
on the docs.  I found that "contain within" means "contain the
path/value", i.e. it has to match the path from the top level, not just
anywhere inside the document:

    SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"a":1}'::jsonb;
     ?column?
    ----------
     t

    SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"b":2}'::jsonb;
     ?column?
    ----------
     f

You can also specify only the top part of the path:

    SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"c":{}}'::jsonb;
     ?column?
    ----------
     t

    SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"d":{}}'::jsonb;
     ?column?
    ----------
     f

I also found that "key/element string exist" really means "string exist
as a top-level key", e.g.

    SELECT '{"a":1, "c" : {"b":2}}'::jsonb ? 'a';
     ?column?
    ----------
     t

    SELECT '{"a":1, "c" : {"b":2}}'::jsonb ? 'b';
     ?column?
    ----------
     f

The attached doc patch and SQL comment update improves this.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Roman grave inscription                             +

Вложения

В списке pgsql-docs по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Update docs for GIN index improvements
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: Omission of "(or C)" in psql's "pset title" header