Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНЯЕТСЯ К:
Виртуальные ядра MongoDB
Оператор $top
аккумулятора возвращает верхний элемент из группы на основе указанного порядка сортировки. Он объединяет сортировку и выделение в одной операции, что делает его эффективным для поиска самых высоких или наименьших значений, не требуя отдельной стадии сортировки.
Синтаксис
Синтаксис для оператора аккумулятора $top
выглядит следующим образом:
{
$group: {
_id: <expression>,
<field>: {
$top: {
sortBy: { <field1>: <sort order>, <field2>: <sort order>, ... },
output: <expression>
}
}
}
}
Параметры
Описание | |
---|---|
sortBy |
Задает порядок сортировки с использованием документа с именами полей и направлениями сортировки (1 для возрастания, -1 для убывания). |
output |
Выражение, указывающее поле или значение, возвращаемое из верхнего документа. |
Пример
Давайте посмотрим, как использовать пример json из stores
набора данных.
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
},
{
"categoryName": "Game Controllers",
"totalSales": 43522
},
{
"categoryName": "Remote Controls",
"totalSales": 28946
},
{
"categoryName": "VR Games",
"totalSales": 32272
}
]
},
"promotionEvents": [
{
"eventName": "Massive Markdown Mania",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 6,
"Day": 29
}
},
"discounts": [
{
"categoryName": "DVD Players",
"discountPercentage": 14
},
{
"categoryName": "Televisions",
"discountPercentage": 22
}
]
}
]
}
Пример 1. Получение категории лучших продаж для каждого магазина
Найдите категорию с самым высоким уровнем продаж для каждого магазина.
db.stores.aggregate([
{ $unwind: "$sales.salesByCategory" },
{
$group: {
_id: "$_id",
storeName: { $first: "$name" },
topSellingCategory: {
$top: {
sortBy: { "sales.salesByCategory.totalSales": -1 },
output: {
categoryName: "$sales.salesByCategory.categoryName",
totalSales: "$sales.salesByCategory.totalSales"
}
}
}
}
}
])
Вы получите выходные данные, показывающие категорию топ-продаж для каждого магазина:
[
{
_id: 'b1d86d1f-8705-4157-b64c-a9eda0df4921',
storeName: 'VanArsdel, Ltd. | Baby Products Haven - West Kingfort',
topSellingCategory: { categoryName: 'Baby Monitors', totalSales: 49585 }
},
{
_id: '22e6367e-8341-415f-9795-118d2b522abf',
storeName: 'Adatum Corporation | Outdoor Furniture Mart - Port Simone',
topSellingCategory: { categoryName: 'Outdoor Benches', totalSales: 4976 }
},
.
.
.
]
Пример 2. Получение самой высокой скидки по категории
Найдите категорию с наибольшим процентом скидки для всех мероприятий акции для каждого магазина.
db.stores.aggregate([
{ $unwind: "$promotionEvents" },
{ $unwind: "$promotionEvents.discounts" },
{
$group: {
_id: "$_id",
storeName: { $first: "$name" },
highestDiscount: {
$top: {
sortBy: { "promotionEvents.discounts.discountPercentage": -1 },
output: {
categoryName: "$promotionEvents.discounts.categoryName",
discountPercentage: "$promotionEvents.discounts.discountPercentage",
eventName: "$promotionEvents.eventName"
}
}
}
}
}
])
Эта категория будет отображаться с наибольшим процентом скидки для каждого магазина:
[
{
_id: '64ec6589-068a-44a6-be5b-9d37bb0a90f1',
storeName: 'First Up Consultants | Computer Gallery - West Cathrine',
highestDiscount: {
categoryName: 'Gaming Accessories',
discountPercentage: 24,
eventName: 'Crazy Markdown Madness'
}
},
{
_id: 'a58d0356-493b-44e6-afab-260aa3296930',
storeName: 'Fabrikam, Inc. | Outdoor Furniture Nook - West Lexie',
highestDiscount: {
categoryName: 'Fire Pits',
discountPercentage: 22,
eventName: 'Savings Showdown'
}
},
.
.
.
]
Связанный контент
- Ознакомьтесь с вариантами миграции из MongoDB в Azure Cosmos DB для MongoDB (vCore)
- Дополнительные сведения о совместимости компонентов с MongoDB