Эта глава посвящена конвейеру агрегации 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
Примечание: Для получения дополнительной информации о статистическом анализе агрегации обратитесь к последующим главам.