запрос на выбор cockroachdb jsonb

У меня есть простая таблица в CockroachDB v2.0-beta:

CREATE TABLE account ( 
   id UUID NOT NULL DEFAULT uuid_v4()::UUID, 
   acct JSON NULL,
   CONSTRAINT "primary" PRIMARY KEY (id ASC),
   INVERTED INDEX account_acct_idx (acct),
   FAMILY "primary" (id, acct) 
) 

Я могу запустить запрос выбора, чтобы найти конкретное свойство в acct-> свойствах следующим образом:

select acct->>'id' from account where acct @> '{"properties": {"foo": "bar"}}';

Есть ли способ выбрать подмножество Json blob, например вложенное свойство? Что-то вроде этого было бы полезно:

select acct->>'id', acct->>'properties:description' from account 
    where acct @> '{"properties": {"foo": "bar"}}';

Заранее благодарим за любые подсказки!

Ура, ~ г


person George    schedule 30.03.2018    source источник
comment
Я не слежу за твоим вопросом. Какой именно результат вы пытаетесь получить? Ничто не мешает вам выполнять произвольный поиск в большом двоичном объекте JSON, возвращаемом из запроса содержания.   -  person Jordan Lewis    schedule 31.03.2018


Ответы (1)


Как упоминал Джордан в комментарии выше, вы уже можете получать вложенные объекты JSON, используя операторы, указанные в вашем вопросе. Используя ваш пример, я могу получить доступ к вложенному объекту следующим образом:

> CREATE TABLE account (
   id UUID NOT NULL DEFAULT uuid_v4()::UUID,
   acct JSON NULL,
   CONSTRAINT "primary" PRIMARY KEY (id ASC),
   INVERTED INDEX account_acct_idx (acct),
   FAMILY "primary" (id, acct)
);
CREATE TABLE

> INSERT INTO account (acct) VALUES ('{"properties": {"foo": "bar"}}');
INSERT 1

> SELECT * FROM account;
                   id                  |              acct
---------------------------------------+---------------------------------
  6fe08368-7720-4ddd-885e-75437b4e0267 | {"properties": {"foo": "bar"}}
(1 row)

> SELECT acct->>'properties' FROM account WHERE acct @> '{"properties": {"foo": "bar"}}';
     ?column?
------------------
  {"foo": "bar"}
(1 row)

Обратите внимание, что ->> возвращает строковое представление вложенного объекта JSON. Как описано в наших документах JSON, оператор -> можно использовать для возврата сам объект. Это также позволяет объединить оператора в цепочку, если вы хотите получить доступ к более глубокому вложенному объекту. Например:

> select acct->'properties'->'foo' from account;
  ?column?
------------
  "bar"
(1 row)
person Rebecca Taft    schedule 15.12.2020
comment
Привет, Ребекка, поддерживает ли SELECT подстановочные знаки для подуровней? например, в настоящее время это не работает: выберите acct - ›'%' -› 'foo' из учетной записи; - person Elle Fie; 15.02.2021
comment
Привет, @ElleFie, нет, CockroachDB в настоящее время не поддерживает это. Постгрес, похоже, тоже не поддерживает это. Но, как описано в этом сообщении, вы можете достичь той же цели, используя функция jsonb_each (), которая поддерживается как в CockroachDB, так и в Postgres. - person Rebecca Taft; 23.02.2021