У меня есть 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?