Фильмы 1950-1970 по годам
[{ $match: { year: { $gte: 1950, $lte: 1970 } } }, { $group: { _id: "$year", total: { $sum: 1 } } }, { $sort: { _id: 1 } }]
Пример из источника показывает три стадии: фильтр, группировку и сортировку.
Занятие 62 вводит агрегацию MongoDB как цепочку стадий.
Aggregation Pipeline передаёт документы от одной стадии к следующей.
$match фильтрует, $group группирует, $sort сортирует, $skip пропускает, $limit ограничивает, $project выбирает поля.
В $group ключ группировки записывается в _id.
$sum: 1 считает документы в группе.
$avg, $max, $min, $round, $first и $last считают значения внутри групп.
Compass позволяет собирать стадии визуально и копировать массив pipeline из квадратных скобок.
Топ-3 ошибки: фильтровать после группировки не тем полем, забыть знак $ перед полем, группировать массив countries без понимания структуры результата.
[{ $match: { year: { $gte: 1950, $lte: 1970 } } }, { $group: { _id: "$year", total: { $sum: 1 } } }, { $sort: { _id: 1 } }]
Пример из источника показывает три стадии: фильтр, группировку и сортировку.
[{ $group: { _id: "$vendor", total: { $sum: 1 } } }]
_id задаёт поле группировки, total считает документы.
[{ $group: { _id: "$vendor", total: { $sum: 1 }, avg_mileage: { $avg: "$distance" } } }]
$avg считает среднее значение distance внутри каждой группы vendor.
[{ $group: { _id: "$countries", total: { $sum: 1 } } }, { $sort: { total: -1 } }, { $limit: 3 }]
Сначала считаем группы, затем сортируем по total и оставляем три результата.