Этот пример демонстрирует добавление этапа группировки ($group) в агрегационную конвейерную обработку MongoDB. Порядок этапов важен: сначала $group, затем $sort. Добавление этапа фильтрации ($match) изменит порядок на: $match, $group, $sort.
Группировка документов
Рассмотрим пример группировки документов в коллекции persons. Этап $group сгруппирует документы по полю favoriteFruit. Результаты будут отсортированы по полю _id в порядке возрастания. Поле _id создаётся этапом $group и содержит уникальные значения поля favoriteFruit. Таким образом, сортировка по _id сортирует фрукты в алфавитном порядке. Результат: три документа – яблоко, банан и клубника, отсортированные от А до Я.
Практический пример в MongoDB Shell
Этот пример, основанный на предыдущем, исключает этап сортировки. Раскомментировав этап $group, сгруппируем документы по полю age и отсортируем результат по полю _id в порядке возрастания. Результат покажет объекты с полем _id, содержащим значения возрастов от 20 до 14, отсортированные по возрастанию.
Группировка по нескольким полям
Сгруппируем по двум полям: eyeColor и favoriteFood. Соответственно, сортировка будет производиться по _id.eyeColor, а затем по _id.favoriteFood в убывающем порядке. Результат: сначала eyeColor синий, затем коричневый и зеленый. Внутри каждого цвета глаза сортировка по favoriteFood идёт от Z до A.
Добавление этапа фильтрации
Этап $match легко добавить. Например, отфильтруем результаты, исключив eyeColor равный синему. Останутся только коричневый и зеленый цвета глаз.
Этот пример демонстрирует использование этапов $group и $sort в агрегации MongoDB, позволяя гибко группировать и сортировать данные по различным полям, включая одновременную группировку и сортировку по нескольким полям. Добавление этапа $match расширяет возможности фильтрации результатов.