Запрос элемента внутри коллекции в поле json - Postgres - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть json структура на моем Postgres. Таблица называется «клиенты», а поле, содержащее json, называется «данные»

{
  customerId: 1,
  something: "..."
  list: [{ nestedId: 1, attribute: "a" }, { nestedId: 2, attribute: "b" }]
}

Я пытаюсь запросить всех клиентов, у которых есть элемент внутри поля «список», с помощью nestedId = 1.

Я выполнил это плохо через запрос:

SELECT data FROM customers a, jsonb_array_elements(data->'list') e WHERE (e->'nestedId')::int = 1

Я сказал плохо, потому что, поскольку я использую jsonb_array_elements в предложении FROM, это не так используется в качестве фильтра, что приводит к последующему сканированию.

Я пробовал что-то вроде:

SELECT data FROM customers where data->'list' @> '{"nestedId": 1, attribute: "a"}'::jsonb

Но он ничего не возвращает. Я представляю себе, потому что поле «список» рассматривается как массив, а не как каждый тип моих записей.

Есть идеи, как выполнить фильтрацию запроса nestedId при условии WHERE?

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте этот запрос:

SELECT data FROM customers where data->'list' @> '[{"nestedId": 1}]';

Этот запрос будет работать в Postgres 9.4 +.

...