Этот пример агрегации демонстрирует использование операторов $group и $count. Сначала документы группируются по заданным полям с помощью $group, а затем $count подсчитывает количество документов в каждой группе.
Пример агрегации с $group и $count
Рассмотрим примеры использования оператора $group.
Пример 1: Группировка по возрасту
Запрос {$group: { _id: "$age", count: { $sum: 1 } }} группирует документы по полю age и подсчитывает количество документов в каждой группе с помощью $sum: 1. Результат 21 указывает на 21 уникальное значение возраста в коллекции persons.
Пример 2: Группировка по цвету глаз
Запрос {$group: { _id: "$eyeColor", count: { $sum: 1 } }} группирует документы по полю eyeColor. Результат 3 означает три уникальных цвета глаз.
Пример 3: Группировка по цвету глаз и полу
Запрос {$group: { _id: { eyeColor: "$eyeColor", gender: "$gender" }, count: { $sum: 1 } }} группирует документы по полям eyeColor и gender. Результат 6 соответствует шести возможным комбинациям (два пола и три цвета глаз).
Пример 4: Группировка по цвету глаз и возрасту
Запрос {$group: { _id: { eyeColor: "$eyeColor", age: "$age" }, count: { $sum: 1 } }} группирует документы по полям eyeColor и age. Результат 63 (21 возраст * 3 цвета глаз) отражает все возможные комбинации.
Добавление этапа $match
Для фильтрации документов перед группировкой используется оператор $match. Он должен предшествовать $group.
Пример: {$match: { age: { $gte: 25 } }} фильтрует документы, где поле age больше или равно 25. Последующий $group будет работать только с отфильтрованными документами. Результат 48 демонстрирует количество документов, удовлетворяющих условию и последующей группировке.
В следующих разделах будет рассмотрен оператор $sort.