Группировка данных в MongoDB по нескольким полям осуществляется с помощью оператора $group.
Группировка по нескольким полям
Сгруппируем данные по полям age и gender. Количество полей может быть любым. Важно учитывать, что агрегация найдет все возможные комбинации, поэтому увеличение числа полей приведет к экспоненциальному росту числа результирующих документов.
Синтаксис $group использует объект с ключом _id. Значение этого ключа — объект с парами ключ-значение, представляющими поля для группировки. Например, для группировки по age и gender:
{
$group: {
_id: { age: "$age", gender: "$gender" }
}
}
Результат — документы с полем _id, содержащим вложенный документ с полями age и gender. Значениями будут все возможные комбинации значений age и gender.
Практический пример
Рассмотрим группировку по eyeColor и favoriteFruit:
{
$group: {
_id: {
eyeColor: "$eyeColor",
favoriteFruit: "$favoriteFruit"
}
}
}
Результат — все комбинации цвета глаз и любимого фрукта. Каждый документ содержит поле _id со вложенным документом, содержащим eyeColor и favoriteFruit. При трех возможных цветах глаз и трех любимых фруктах, общее количество результатов будет девять (3 * 3 = 9).
Добавление дополнительных полей и переименование
Добавим поле age и переименуем favoriteFruit в fruit:
{
$group: {
_id: {
eyeColor: "$eyeColor",
fruit: "$favoriteFruit",
age: "$age"
}
}
}
Результат — все комбинации цвета глаз, любимого фрукта и возраста. Количество результатов существенно увеличится.
Комбинация $group и $match
Комбинация этапов $group и $match позволяет сначала отфильтровать данные, а затем выполнить группировку.
Оператор $group в MongoDB эффективен для группировки данных по нескольким полям. Управление именами полей в выходных данных и комбинация $group с другими операторами агрегации расширяют его возможности.