Эта глава посвящена конвейеру агрегации MongoDB, который в основном используется для статистического анализа, аналогично оператору group by в SQL. В оболочке MongoDB статистический анализ достигается с помощью функции db.collection.aggregate().

Концепция

Конвейер агрегации - это абстрактное понятие, которое рассматривает данные как воду, которая течет через трубопровод. Мы можем обрабатывать данные на нескольких этапах внутри конвейера. После обработки данных на одном этапе обработанные результаты передаются на следующий этап для дальнейшей обработки.

Примеры применения конвейера агрегации в статистическом анализе:

  • На первом этапе из коллекции извлекаются пакеты документов на основе определенных условий.
  • На втором этапе извлеченные данные документов группируются и агрегируются.
  • На третьем этапе агрегированные данные из второго этапа сортируются.

Весь процесс похож на операцию конвейера, где данные поступают с одного конца конвейера, проходят обработку через несколько этапов, а затем выводят окончательный результат.

Поддерживаемые операторы конвейера MongoDB

Ниже приведены общие операторы конвейера, поддерживаемые MongoDB:

Оператор Описание
$match Этап $match используется для фильтрации данных документов на основе условий, аналогично условию where в SQL.
$group Этап $group используется для группировки и агрегирования данных документов, подобно оператору group by в SQL.
$sort Используется для сортировки данных.

Шаги для использования конвейера агрегации

Обычно включаются три этапа:

  • Фильтрация целевых данных с использованием $match.
  • Группировка и агрегирование данных с использованием $group.
  • Сортировка результатов с использованием $sort (необязательно).

Пример:

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

Эквивалентный SQL:

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

Примечание: Для получения дополнительной информации о статистическом анализе агрегации обратитесь к последующим главам.