Как использовать конвейер агрегации в MongoDB

Конвейер агрегирования — рекомендуемый способ выполнения сложных запросов в MongoDB. Если вы используете MapReduce MongoDB, лучше всего переключиться на конвейер агрегации для более эффективных вычислений.

Как использовать конвейер агрегации в MongoDB. Рисунок 1.

Что такое конвейер агрегации в MongoDB?

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

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

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

Как использовать конвейер агрегации в MongoDB. Рисунок 2.

Этапы конвейера агрегации

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

Ниже приведены некоторые из наиболее распространенных этапов.

$соответствие. этап

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

$группа. этап

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

Например, рассмотрим следующие примеры данных о продажах:

Как использовать конвейер агрегации в MongoDB. Рисунок 3.

Используя конвейер агрегации, вы можете рассчитать общий объем продаж и пиковые продажи для каждой группы продуктов:

{ $group: { _id: $Section, total_sales_count: {$sum : $Sold}, top_sales: {$max: $Amount}, } }

Пара _id:$Section группирует выходной документ по разделам. Указывая поля top_sale_count и top_sale, MongoDB генерирует новые ключи на основе активности, определенной агрегатором; это может быть $sum, $min, $max или $avg.

$пропустить. этап

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

Чтобы добавить этап пропуска, вставьте оператор $skip в конвейер агрегации:

., { $skip: 1 },

$этап сортировки

Этап сортировки позволяет сортировать данные по убыванию или возрастанию. Например, отсортируйте данные из предыдущего примера запроса в порядке убывания, чтобы решить, в каком разделе самые высокие продажи.

Добавьте оператор $sort в предыдущий запрос:

., { $sort: {top_sales: -1} },

лимит $. этап

Оператор ограничения уменьшает количество выходных документов, которые должен отображать конвейер агрегации. Например, используйте оператор $limit, чтобы получить наибольшую часть дохода, полученную за предыдущий период:

., { $sort: {top_sales: -1} }, {“$limit”: 1}

Результаты возвращают только первый документ, который имеет наибольший объем продаж, поскольку он отображается вверху результатов с разбивкой по категориям.

$проект. этап

Фаза $project позволяет вам придать результирующему документу желаемую форму. Используя оператор $project, вы можете указать поле, которое будет включено в результат, и настроить его ключевое имя.

Например, пример вывода без фазы $project выглядит так:

Как использовать конвейер агрегации в MongoDB. Рисунок 4.

Давайте посмотрим, как это выглядит в сочетании со стадией $project. Чтобы добавить $project в конвейер:

., { “$project”: { “_id”: 0, “Section”: “$_id”, “TotalSold”: “$total_sales_count”, “TopSale”: “$top_sales”, } }

Поскольку мы разгруппировали данные по частям продукта, приведенные выше данные включают каждую часть продукта в выходной документ. Это также гарантирует, что агрегированные показатели продаж и основные функции продаж в выходных данных будут TotalSold и TopSale .

Конечный результат намного компактнее, чем в предыдущей версии:

Как использовать конвейер агрегации в MongoDB. Рисунок 5.

Как создать конвейер агрегации в MongoDB

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

Используя предыдущий образец данных о продажах, давайте синтезируем некоторые из рассмотренных выше этапов, чтобы лучше понять конвейер агрегации в MongoDB:

db.sales.aggregate(( { “$match”: { “Продано”: { “$gte”: 5 } } }, { “$group”: { “_id”: “$Section”, “total_sales_count”: { “$sum”: “$Sold” }, “top_sales”: { “$max”: “$Amount” }, } }, { “$sort”: { “top_sales”: -1 } }, {“$skip “: 0}, { “$project”: { “_id”: 0, “Section”: “$_id”, “TotalSold”: “$total_sales_count”, “TopSale”: “$top_sales”, } } ))

Результат:

Как использовать конвейер агрегации в MongoDB. Рисунок 6.

Выше описано, как использовать конвейер агрегации в MongoDB. Надеюсь, статья окажется для вас полезной.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *