Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Вы хотите перенести существующее приложение MongoDB или использовать функции языка запросов MongoDB (MQL)? Рассмотрим Azure DocumentDB.
Вы ищете решение для баз данных для крупномасштабных сценариев с соглашением об уровне обслуживания (SLA) с доступностью 99,999%, мгновенным автомасштабированием и автоматическим переключением на резервные ресурсы в нескольких регионах? Рассмотрим Azure Cosmos DB для NoSQL.
Конвейер агрегирования — это мощное средство, позволяющее разработчикам выполнять расширенный анализ данных и манипулирование их коллекциями. Конвейер — это последовательность операций обработки данных, выполняемых на входных документах для создания вычисляемых выходных данных. Этапы конвейера обрабатывают входные документы и передают результат на следующий этап. Каждый этап выполняет определенную операцию по данным, например фильтрацию, группирование, сортировку и преобразование.
Базовый синтаксис
Базовый синтаксис для конвейера агрегирования выглядит следующим образом:
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? Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса с использованием vCores или vCPUs.
- Если вам известна стандартная частота запросов для текущей рабочей нагрузки базы данных, ознакомьтесь со статьей о расчете единиц запросов с помощью планировщика ресурсов Azure Cosmos DB.