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 operador $bottom ordena documentos en uno o varios campos especificados por la consulta y devuelve el último documento que coincide con los criterios de filtrado.
Syntax
{
$bottom: {
output: [listOfFields],
sortBy: {
<fieldName>: < sortOrder >
}
}
}
Parámetros
| Parámetro | Description |
|---|---|
listOfFields |
Lista de campos que se van a devolver del ú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: Búsqueda de la tienda con ventas totales más bajas
Supongamos que queremos determinar la tienda dentro de la empresa First Up Consultants con las ventas totales más bajas, ejecutar una consulta para recuperar documentos dentro de la empresa First Up Consultants, ordenar los documentos en orden descendente de ventas totales y devolver el último documento del conjunto de resultados ordenados.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$group: {
_id: "$company",
bottomSales: {
$bottom: {
output: ["$company", "$sales"],
sortBy: {
"sales.revenue": -1
}
}
}
}
}])
Esta consulta devuelve el siguiente resultado:
[
{
"_id": "First Up Consultants",
"bottomSales": [
"First Up Consultants",
{
"totalSales": 119,
"salesByCategory": [
{
"categoryName": "Skirts",
"totalSales": 109
}
]
}
]
}]
Ejemplo 2: Buscar la categoría por tienda con las ventas más bajas
Para buscar la categoría con las ventas más bajas por tienda, ejecute una consulta para recuperar tiendas con varias categorías de ventas, ordene las categorías en orden descendente de ventas totales dentro de cada tienda y devuelva el último documento del conjunto de resultados ordenado.
db.stores.aggregate([{
$unwind: "$sales.salesByCategory"
},
{
$match: {
"sales.salesByCategory.totalSales": {
$exists: true
}
}
},
{
$group: {
_id: "$_id",
storeName: {
$first: "$name"
},
lowestCategory: {
$bottom: {
sortBy: {
"sales.salesByCategory.totalSales": 1
},
output: {
categoryName: "$sales.salesByCategory.categoryName",
totalSales: "$sales.salesByCategory.totalSales"
}
}
}
}
}
])
Los dos primeros resultados devueltos por esta consulta son:
[
{
"_id": "b1d86d1f-8705-4157-b64c-a9eda0df4921",
"storeName": "VanArsdel, Ltd. | Baby Products Haven - West Kingfort",
"lowestCategory": { "categoryName": "Baby Monitors", "totalSales": 49585 }
},
{
"_id": "22e6367e-8341-415f-9795-118d2b522abf",
"storeName": "Adatum Corporation | Outdoor Furniture Mart - Port Simone",
"lowestCategory": { "categoryName": "Outdoor Benches", "totalSales": 4976 }
}
]