Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El $top operador ordena documentos en uno o varios campos especificados por la consulta y devuelve el primer documento que coincide con los criterios de filtrado. Combina la ordenación y la selección en una sola operación, lo que hace que sea eficaz para encontrar los valores más altos o mínimos sin necesidad de una fase de ordenación independiente.
Syntax
{
$top: {
output: [listOfFields],
sortBy: {
< fieldName >: < sortOrder >
}
}
}
Parámetros
| Parámetro | Description |
|---|---|
listOfFields |
Lista de campos que se van a devolver para el último documento del conjunto de resultados |
fieldName |
Campo que se va a usar para ordenar el conjunto de resultados |
sortOrder |
1 o -1. 1 implica la ordenación en orden ascendente del valor del campo, mientras que -1 implica la ordenación en orden descendente de los valores del campo |
Examples
Considere este documento de ejemplo de la colección de tiendas.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Ejemplo 1: Obtener la categoría de ventas principales por tienda
Para encontrar la categoría de ventas más alta dentro de la empresa First Up Consultants, ejecute una consulta para recuperar tiendas dentro de la empresa, ordene los documentos en orden descendente de las ventas totales dentro de cada categoría y devuelva el documento superior en el conjunto de resultados ordenados.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$group: {
_id: "$company",
topSales: {
$top: {
output: ["$company", "$sales"],
sortBy: {
"sales.totalSales": -1
}
}
}
}
}])
Esta consulta devuelve el siguiente resultado:
[
{
"_id": "First Up Consultants",
"topSales": [
"First Up Consultants",
{
"salesByCategory": [
{
"categoryName": "Towel Sets",
"totalSales": 520
},
{
"categoryName": "Bath Accessories",
"totalSales": 41710
},
{
"categoryName": "Drapes",
"totalSales": 42893
},
{
"categoryName": "Towel Racks",
"totalSales": 30773
},
{
"categoryName": "Hybrid Mattresses",
"totalSales": 39491
},
{
"categoryName": "Innerspring Mattresses",
"totalSales": 6410
},
{
"categoryName": "Bed Frames",
"totalSales": 41917
},
{
"categoryName": "Mattress Protectors",
"totalSales": 44124
},
{
"categoryName": "Bath Towels",
"totalSales": 5671
},
{
"categoryName": "Turkish Towels",
"totalSales": 25674
}
],
"revenue": 279183
}
]
}
]
Ejemplo 2: Obtener el descuento más alto por categoría de promoción
Para capturar el mayor descuento por categoría de ventas, ejecute primero una consulta para agrupar todos los documentos por almacén y, a continuación, ordene los documentos en orden descendente de porcentajes de descuento dentro de cada evento de promoción y devuelva el documento superior del conjunto de resultados ordenado por almacén.
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"
}
}
}
}
}
])
Los dos primeros resultados devueltos por esta consulta son:
[
{
"_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"
}
}
]