MongoDB агрегация: группировка по нескольким полям

Группировка данных в 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 с другими операторами агрегации расширяют его возможности.

Что будем искать? Например,программа