Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Конвейер агрегирования — это мощное средство, позволяющее разработчикам выполнять расширенный анализ данных и манипулирование их коллекциями. Конвейер — это последовательность операций обработки данных, выполняемых на входных документах для создания вычисляемых выходных данных. Этапы конвейера обрабатывают входные документы и передают результат на следующий этап. Каждый этап выполняет определенную операцию по данным, например фильтрацию, группирование, сортировку и преобразование.
Базовый синтаксис
Базовый синтаксис для конвейера агрегирования выглядит следующим образом:
db.collection.aggregate([ { stage1 }, { stage2 }, ... { stageN }])
Где db.collection — это коллекция MongoDB, на которой вы хотите выполнить агрегирование, и этап1, этап2, ..., stageN — это этапы конвейера, которые необходимо применить.
Пример этапов
Cosmos DB для MongoDB предоставляет широкий спектр этапов, которые можно использовать в конвейере, включая:
- $match. Фильтрует документы, чтобы передать только те документы, которые соответствуют указанному условию.
- $project. Преобразует документы в новую форму, добавляя, удаляя или обновляя поля.
- $group. Группирует документы по одному или нескольким полям и выполняет различные агрегатные функции для сгруппированных данных.
- $sort. Сортирует документы на основе указанных полей.
- $skip. Пропускает указанное количество документов.
- $limit. Ограничивает количество документов, передаваемых на следующий этап.
- $unwind. Деконструкция поля массива из входных документов для вывода документа для каждого элемента.
Просмотр всех доступных этапов см. в разделе поддерживаемых функций
Примеры
Ниже приведены некоторые примеры использования конвейера агрегирования для выполнения различных операций с данными:
Фильтрация. Чтобы отфильтровать документы с полем "количество", превышающее 20, можно использовать следующий конвейер:
db.collection.aggregate([
{ $match: { quantity: { $gt: 20 } } }
])
Группирование. Чтобы сгруппировать документы по полю "категория" и вычислить общее "количество" для каждой группы, можно использовать следующий конвейер:
db.collection.aggregate([
{ $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])
Сортировка: чтобы сортировать документы по полю "price" в порядке убывания, можно использовать следующий конвейер:
db.collection.aggregate([
{ $sort: { price: -1 } }
])
Преобразование. Чтобы добавить новое поле "скидка" в документы с "ценой" больше 100, можно использовать следующий конвейер:
db.collection.aggregate([
{ $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])
Отмена: чтобы разделить все вложенные документы из поля массива "теги" и создать новый документ для каждого значения, можно использовать следующий конвейер:
db.collection.aggregate([
{ $unwind: "$tags" }
])
Пример с несколькими этапами
db.sales.aggregate([
{ $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
{ $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
{ $sort: { totalSales: -1 } },
{ $limit: 5 }
])
В этом примере мы используем пример коллекции с именем sales, в которой есть документы со следующими полями: date, Category и Sales.
Первый этап { $match: { дата: { $gte: "2021-01-01", $lt: "2021-03-01" } } фильтрует документы по полю "дата", передавая документы только с датой между 1 января 2021 г. и 28 февраля 2021 г. Мы используем формат строковой даты с форматом YYYY-MM-DD.
Второй этап { $group: { _id: "$category", totalSales: { $sum: "$sales" } } группирует документы по полю "категория" и вычисляет общий объем продаж для каждой группы.
Третий этап { $sort: { totalSales: -1 } } сортирует документы по полю totalSales в порядке убывания.
Четвертый этап { $limit: 5 } ограничивает количество документов, передаваемых на следующий этап, только к верхней 5.
В результате конвейер вернет первые 5 категорий по общему объему продаж для указанного диапазона дат.
Следующие шаги
- Узнайте, как использовать Studio 3T с Azure Cosmos DB для MongoDB.
- Узнайте, как использовать Robo 3T с Azure Cosmos DB для MongoDB.
- Изучите примеры MongoDB с помощью Azure Cosmos DB для MongoDB.
- Если вы планируете ресурсы для миграции в Azure Cosmos DB, Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса на основе этих данных.
- Если вам известна стандартная частота запросов для текущей рабочей нагрузки базы данных, ознакомьтесь со статьей о расчете единиц запросов с помощью планировщика ресурсов Azure Cosmos DB.