Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
Виртуальные ядра MongoDB
Конвейеры $facet
агрегирования этапов позволяют выполнять несколько параллельных агрегатов в рамках одного этапа конвейера. Это полезно для выполнения нескольких анализов одного набора данных в одном запросе.
Синтаксис
Синтаксис этапа $facet
выглядит следующим образом:
{
"$facet": {
"outputField1": [ { "stage1": {} }, { "stage2": {} } ],
"outputField2": [ { "stage1": {} }, { "stage2": {} } ]
}
}
Параметры
Описание | |
---|---|
outputFieldN |
Имя поля вывода. |
stageN |
Этап агрегирования, который необходимо выполнить. |
Пример
Пример обращается ко всем связанным записям к таким категориям продуктов, как Laptops
, Smartphones
Cameras
и Watches
из stores
коллекции.
Пример 1. Фасетный поиск по продажам и рекламным акциям
В примере используется $facet
этап для одновременного анализа продаж и рекламных акций для указанных категорий продуктов. Конвейер salesAnalysis
раскручивает , фильтрует salesByCategory
для определенных категорий и группирует их для суммирования totalSales
. Конвейер анализа продвижения раскручивает рекламные мероприятия и их скидки, фильтры для определенных категорий, таких как Laptops
, Smartphones
и т. д., и группирует их, чтобы вычислить средний процент скидки. Входные документы из stores
коллекции извлекаются из базы данных только один раз в начале этой операции.
db.stores.aggregate([
{
$facet: {
salesAnalysis: [
{ $unwind: "$sales.salesByCategory" },
{ $match: { "sales.salesByCategory.categoryName": { $in: ["Laptops", "Smartphones", "Cameras", "Watches"] } } },
{ $group: { _id: "$sales.salesByCategory.categoryName", totalSales: { $sum: "$sales.salesByCategory.totalSales" } } }
],
promotionAnalysis: [
{ $unwind: "$promotionEvents" },
{ $unwind: "$promotionEvents.discounts" },
{ $match: { "promotionEvents.discounts.categoryName": { $in: ["Laptops", "Smartphones", "Cameras", "Watches"] } } },
{ $group: { _id: "$promotionEvents.discounts.categoryName", avgDiscount: { $avg: "$promotionEvents.discounts.discountPercentage" } } }
]
}
}
]).pretty();
Возвращаемые выходные данные из запроса отображают агрегированные аналитические сведения.
{
"salesAnalysis": [
{ "_id": "Smartphones", "totalSales": 440815 },
{ "_id": "Laptops", "totalSales": 679453 },
{ "_id": "Cameras", "totalSales": 481171 },
{ "_id": "Watches", "totalSales": 492299 }
],
"promotionAnalysis": [
{ "_id": "Smartphones", "avgDiscount": 14.32 },
{ "_id": "Laptops", "avgDiscount": 14.780645161290323 },
{ "_id": "Cameras", "avgDiscount": 15.512195121951219 },
{ "_id": "Watches", "avgDiscount": 15.174418604651162 }
]
}
Связанный контент
- Ознакомьтесь с параметрами миграции из MongoDB в Azure Cosmos DB для MongoDB (vCore)
- Дополнительные сведения о совместимости компонентов с MongoDB