Definició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 de cada elemento del grupo y puede ser cualquier expresión. |
Comportamiento
Valores nulos y faltantes
Considere la siguiente agregación que devuelve el documento inferior de un grupo de puntuaciones:
$bottomno filtra valores nulos.$bottomConvierte los valores faltantes en nulos.
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 documentosgameIdpor. Este ejemplo solo tiene un,.gameIdG1PlayerDtiene una puntuación faltante yPlayerEtiene un valor nuloscore. Ambos valores se consideran nulos.Los campos
playerIdyscorese especifican comooutput : ["$playerId"," $score"]y se devuelven como valores de matriz.Especifique 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 desempate más determinista para múltiples valores nulos, agregue más campos a
sortBy.
[ { _id: 'G1', playerId: [ 'PlayerD', null ] } ]
Restricciones
Compatibilidad con funciones de ventana y expresiones de agregación
$bottom no se admite como expresión de agregación.
$bottom se admite window operator como.
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
Puedes utilizar 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 } } } } } ] )
El ejemplo de canalización:
Utiliza para filtrar los resultados según un
$matchúnico.gameIdEn esteG1caso,.Usa para agrupar los
$groupresultadosgameIdpor. En esteG1caso,.Especifica los campos que se generan para
$bottomconoutput : ["$playerId"," $score"].Utiliza
sortBy: { "score": -1 }para ordenar las puntuaciones 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 en varios juegos
Puedes usar el acumulador $bottom para encontrar el score más bajo en cada juego.
db.gamescores.aggregate( [ { $group: { _id: "$gameId", playerId: { $bottom: { output: [ "$playerId", "$score" ], sortBy: { "score": -1 } } } } } ] )
El ejemplo de canalización:
Utiliza
$grouppara agrupar los resultados porgameId.Utiliza
$bottompara devolver elscoreinferior para cada juego.Especifica los campos que se generan para
$bottomconoutput : ["$playerId", "$score"].Utiliza
sortBy: { "score": -1 }para ordenar las puntuaciones en orden descendente.
La operación devuelve los siguientes resultados:
[ { _id: 'G2', playerId: [ 'PlayerA', 10 ] }, { _id: 'G1', playerId: [ 'PlayerD', 1 ] } ]