Definición
$bottomNuevo en la versión 5.2.
Devuelve el elemento más bajo dentro de un grupo según el orden de acomodo especificado.
Nota
Desambiguación
Esta página describe el operador de acumulación $bottom. Para el operador de expresión $bottom, consulte $bottom (operador de expresión).
Sintaxis
{ $bottom: { sortBy: { <field1>: <sort order>, <field2>: <sort order> ... }, output: <expression> } }
Campo | Necesidad | Descripción |
|---|---|---|
sortBy | Requerido | Especifica el orden de los resultados, con una sintaxis similar a |
salida | Requerido | Representa la salida para cada elemento del grupo y puede ser cualquier expresión. |
Comportamiento
Valores nulos y faltantes
Considera la siguiente agregación que devuelve el documento más bajo de un grupo de puntuaciones:
$bottomno filtra los valores nulos.$bottomconvierte los valores faltantes en null.
db.aggregate( [ { $documents: [ { playerId: "PlayerA", gameId: "G1", score: 1 }, { playerId: "PlayerB", gameId: "G1", score: 2 }, { playerId: "PlayerC", gameId: "G1", score: 3 }, { playerId: "PlayerD", gameId: "G1"}, { playerId: "PlayerE", gameId: "G1", score: null } ] }, { $group: { _id: "$gameId", playerId: { $bottom: { output: [ "$playerId", "$score" ], sortBy: { "score": -1 } } } } } ] )
En este ejemplo:
$documentscrea los documentos literales que contienen las puntuaciones de los jugadores.$groupagrupa los documentos porgameId. Este ejemplo tiene solo ungameId,G1.PlayerDtiene una puntuación faltante yPlayerEtiene unscorenulo. Estos valores se consideran ambos nulos.Los campos
playerIdyscorese especifican comooutput : ["$playerId"," $score"]y se devuelven como valores de un arreglo.Especifica el orden de clasificación con
sortBy: { "score": -1 }.PlayerDyPlayerEempató como el elemento inferior.PlayerDse devuelve como la parte inferiorscore.Para tener un comportamiento de empate más determinista para múltiples valores nulos, añada más campos a
sortBy.
[ { _id: 'G1', playerId: [ 'PlayerD', null ] } ]
Restricciones
Compatibilidad con funciones de ventana y expresiones de agregación
$bottom no es compatible como expresión de agregación.
$bottom es compatible como un window operator.
Consideraciones sobre el límite de memoria
Las pipelines de agregación que llaman a $bottom están sujetas al límite de 100 MB. Si se supera este límite para un grupo individual, la agregación falla con un error.
Ejemplos
Considera una colección gamescores con los siguientes documentos:
db.gamescores.insertMany([ { playerId: "PlayerA", gameId: "G1", score: 31 }, { playerId: "PlayerB", gameId: "G1", score: 33 }, { playerId: "PlayerC", gameId: "G1", score: 99 }, { playerId: "PlayerD", gameId: "G1", score: 1 }, { playerId: "PlayerA", gameId: "G2", score: 10 }, { playerId: "PlayerB", gameId: "G2", score: 14 }, { playerId: "PlayerC", gameId: "G2", score: 66 }, { playerId: "PlayerD", gameId: "G2", score: 80 } ])
Encuentra el fondo Score
Puede usar el acumulador $bottom para encontrar la puntuación más baja en un solo juego.
db.gamescores.aggregate( [ { $match : { gameId : "G1" } }, { $group: { _id: "$gameId", playerId: { $bottom: { output: [ "$playerId", "$score" ], sortBy: { "score": -1 } } } } } ] )
La pipeline de ejemplo:
Utiliza
$matchpara filtrar los resultados en un sologameId. En este caso,G1.Usa
$grouppara agrupar los resultados porgameId. En este caso,G1.Especifica los campos que se muestran para
$bottomconoutput : ["$playerId"," $score"].Utiliza
sortBy: { "score": -1 }para ordenar los puntajes en orden descendente.Utiliza
$bottompara devolver la puntuación más baja del juego.
La operación devuelve los siguientes resultados:
[ { _id: 'G1', playerId: [ 'PlayerD', 1 ] } ]
Encontrar el fondo Score a través de múltiples juegos
Puede utilizar el acumulador $bottom para encontrar el fondo score en cada juego.
db.gamescores.aggregate( [ { $group: { _id: "$gameId", playerId: { $bottom: { output: [ "$playerId", "$score" ], sortBy: { "score": -1 } } } } } ] )
La pipeline de ejemplo:
Utiliza
$grouppara agrupar los resultados porgameId.Utiliza
$bottompara devolver el fondoscorepara cada juego.Especifica los campos que se muestran para
$bottomconoutput : ["$playerId", "$score"].Utiliza
sortBy: { "score": -1 }para ordenar los puntajes en orden descendente.
La operación devuelve los siguientes resultados:
[ { _id: 'G2', playerId: [ 'PlayerA', 10 ] }, { _id: 'G1', playerId: [ 'PlayerD', 1 ] } ]