Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
$inferior
Nuevo a partir de la versión 8.0.1.
Utilice el $bottom acumulador de la $group fase para obtener el documento con la clasificación más baja por grupo según un orden de clasificación especificado.
Parámetros
-
sortBy: un documento que especifica el orden de clasificación.1Utilícelo para ascender o-1descender. -
output: expresión que especifica los campos que se devolverán desde la parte inferior del documento.
Ejemplo (MongoDB Shell)
El siguiente ejemplo muestra cómo usar el $bottom acumulador para encontrar la venta más baja (la cantidad más baja) por artículo de una colección de ventas.
Crea documentos de muestra
db.sales.insertMany([ { item: "abc", quantity: 10, price: 5 }, { item: "abc", quantity: 5, price: 8 }, { item: "xyz", quantity: 15, price: 3 }, { item: "xyz", quantity: 7, price: 6 } ])
Ejemplo de consulta
db.sales.aggregate([ { $group: { _id: "$item", bottomSale: { $bottom: { sortBy: { quantity: -1 }, output: { quantity: "$quantity", price: "$price" } } } } } ])
Salida
[
{ "_id": "xyz", "bottomSale": { "quantity": 7, "price": 6 } },
{ "_id": "abc", "bottomSale": { "quantity": 5, "price": 8 } }
]
Ejemplo de uso de un operador de ventana (MongoDB Shell)
Nuevo a partir de la versión 8.0.2.
El $bottom operador también se puede utilizar como operador de ventanas en el $setWindowFields escenario. En este contexto, devuelve el output documento que ocupa el último lugar (según el documento del operadorsortBy) de entre los documentos de cada ventana. Se especifica el operador en el output campo y, si lo desea, se definen los límites de la ventana con un window documento.
nota
Cuando se usa como operador de ventana en$setWindowFields, $bottom está limitado a 100 MB de datos intermedios. Una operación que supera este límite devuelve un error.
Crea documentos de muestra
db.matchScores.insertMany([ { _id: 1, player: "Alice", round: 1, score: 20 }, { _id: 2, player: "Alice", round: 2, score: 35 }, { _id: 3, player: "Alice", round: 3, score: 28 }, { _id: 4, player: "Bob", round: 1, score: 15 }, { _id: 5, player: "Bob", round: 2, score: 40 } ]);
Ejemplo de consulta
El ejemplo siguiente divide los documentos porplayer, ordena cada partición y devuelve la ronda con la puntuación más baja vista desde el principio de la partición hasta el documento actual. round
db.matchScores.aggregate([ { $setWindowFields: { partitionBy: "$player", sortBy: { round: 1 }, output: { worstRoundSoFar: { $bottom: { sortBy: { score: -1 }, output: { round: "$round", score: "$score" } }, window: { documents: ["unbounded", "current"] } } } } } ]);
Salida
[
{ "_id": 1, "player": "Alice", "round": 1, "score": 20, "worstRoundSoFar": { "round": 1, "score": 20 } },
{ "_id": 2, "player": "Alice", "round": 2, "score": 35, "worstRoundSoFar": { "round": 1, "score": 20 } },
{ "_id": 3, "player": "Alice", "round": 3, "score": 28, "worstRoundSoFar": { "round": 1, "score": 20 } },
{ "_id": 4, "player": "Bob", "round": 1, "score": 15, "worstRoundSoFar": { "round": 1, "score": 15 } },
{ "_id": 5, "player": "Bob", "round": 2, "score": 40, "worstRoundSoFar": { "round": 1, "score": 15 } }
]
Cada documento se complementa con worstRoundSoFar la ronda con la puntuación más baja de su partición hasta el documento actual, incluido.
Ejemplos de código
Para ver un ejemplo de código sobre el uso $bottom del operador, seleccione la pestaña correspondiente al idioma que desee utilizar. Los siguientes ejemplos muestran tanto el uso del acumulador (en$group) como el uso del operador de ventanas (en$setWindowFields):