Перейти к основному содержимому
Модуль 15 · Урок 2 из 257/57 в курсе~15 min
Уроки модуля (2/2)

Функции агрегирования JSON

Функции агрегирования JSON

Интеграция двусторонняя. Базе данных не обязательно ограничиваться анализом JSON: она может его построить. Представьте себе, если бы вашему API и Node.js не приходилось выполнять грязную и интенсивную работу по сериализации вложенных объектов в JSON, поскольку БД доставляла их уже собранными прямо с диска.

Создание объектов и массивов

Вместо классической массовой агрегации или конкатенации строк (String_agg) мы обратимся к этим функциям:

  • json_build_object(key, value, ...) или jsonb_build_object(...)
  • json_agg(...) или jsonb_agg(...)
SQL
SELECT json_build_object('name', first_name, 'city', city) AS data
FROM customers;

Вы увидите напечатанные строки, содержащие { "name": "...", "city": "..." }, что полностью соответствует требованиям.

Упражнение#sql.m15.l2.e1
Попыток: 0Загрузка…

Из таблицы «клиенты» верните данные в виде строк JSON, сопоставленных с помощью \`json_build_object\`. Сопоставьте два ключа: «имя», привязанное к «first_name», и «mail», привязанное к «электронной почте». Используйте \`AS customer_doc\` для столбца.

Загрузка редактора…
Показать подсказку

json_build_object('имя', first_name, 'почта', электронная почта)

Решение доступно после 3 попыток

Упражнение#sql.m15.l2.e2
Попыток: 0Загрузка…

Для каждого заказа (\`order_id\`) создайте в одном блоке все включенные в него \`product_id\`. Из таблицы «order_items» запустите «GROUP BY order_id». Затем выберите «order_id» и накопите в массиве JSON (JSON_AGG) только данные «product_id». Назовите массив \`products\`.

Загрузка редактора…
Показать подсказку

JSON_AGG(product_id) плюс классическая группа для сбора данных.

Решение доступно после 3 попыток