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

📖 Теория

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

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

Занятие 62 вводит агрегацию MongoDB как цепочку стадий.

Aggregation Pipeline передаёт документы от одной стадии к следующей.

$match фильтрует, $group группирует, $sort сортирует, $skip пропускает, $limit ограничивает, $project выбирает поля.

В $group ключ группировки записывается в _id.

$sum: 1 считает документы в группе.

$avg, $max, $min, $round, $first и $last считают значения внутри групп.

Compass позволяет собирать стадии визуально и копировать массив pipeline из квадратных скобок.

Топ-3 ошибки: фильтровать после группировки не тем полем, забыть знак $ перед полем, группировать массив countries без понимания структуры результата.

Ключевые идеи

Агрегация и группировка

Источник объясняет агрегацию как сочетание стадий и функций. В отличие от find(), где фильтр возвращает документы почти в исходном виде, pipeline может последовательно фильтровать, группировать, сортировать и менять форму результата.

Процесс передачи данных от одной стадии к другой называется Aggregation Pipeline.

Популярные стадии

$match фильтрует документы и близок к Filter в Compass. $group собирает документы в группы, где _id задаёт ключ группировки. $sort упорядочивает результат. $skip и $limit управляют количеством строк. $project показывает или скрывает поля.

Функции в агрегации

$sum считает или суммирует, $avg рассчитывает среднее, $max и $min находят границы, $round округляет, $first и $last берут первый или последний документ в группе. Для $first/$last обычно нужна предварительная сортировка.

Тип year в imdb

Источник отдельно предупреждает: в коллекции imdb поле year хранится как текст. Поэтому для диапазона 1980-1990 пример использует $in со строками, а не $gte/$lte по числам.

Проверить по документации: интерфейс MongoDB Compass и набор доступных стадий зависит от версии Compass и MongoDB Server.