← К оглавлению занятия

📖 Теория

📁 Блок: MongoDB / практическая отработка ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя

⚡ Кратко: суть занятия

Первая часть практической отработки MongoDB строится вокруг aggregation pipeline.

$bucket распределяет документы по диапазонам: например цены жилья в Барселоне.

$unwind превращает каждый элемент массива reviews в отдельный документ.

$set и $unset помогают превратить вложенный объект отзыва в плоский документ.

$out записывает результат агрегации в новую коллекцию reviews.

$merge обновляет существующую коллекцию, когда нужно добавить вычисленные поля.

$map, $multiply и $sum позволяют посчитать total по массиву items в sales.

Топ-3 ошибки: забыть $match перед $bucket, использовать $out вместо $merge для обновления, неправильно обратиться к $$item внутри $map.

Разбор темы

$bucket

$bucket группирует документы по диапазонам значения. В источнике он используется для цен за ночь и средних оценок ресторанов.

Разворачивание массива

Чтобы сделать один документ на один отзыв, массив reviews нужно развернуть через $unwind.

Плоская структура отзыва

$set копирует поля из вложенного reviews в верхний уровень документа, а $unset удаляет исходный объект reviews.

$out и $merge

$out создаёт или перезаписывает коллекцию результатом pipeline. $merge подходит, когда нужно обновить существующие документы.

Расчёт total

$map проходит по items, $multiply считает price * quantity, а внешний $sum складывает элементы массива.

Проверить по документации: дополнительные практические формы MongoDB и поведение стадий агрегации могут зависеть от версии сервера, Atlas или Compass. Перед использованием в проекте сверяйте синтаксис с официальной документацией.