Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$bottom (operador acumulador)

$bottom

Nuevo en la versión 5.2.

Devuelve el elemento más bajo dentro de un grupo según el orden de acomodo especificado.

{
$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 $sort.

salida

Requerido

Representa la salida de cada elemento del grupo y puede ser cualquier expresión.

Considere la siguiente agregación que devuelve el documento inferior de un grupo de puntuaciones:

  • $bottom no filtra valores nulos.

  • $bottom Convierte 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:

  • $documents crea los documentos literales que contienen las puntuaciones de los jugadores.

  • $group agrupa los documentos gameId por. Este ejemplo solo tiene un,.gameIdG1

  • PlayerD tiene una puntuación faltante y PlayerE tiene un valor nulo score. Ambos valores se consideran nulos.

  • Los campos playerId y score se especifican como output : ["$playerId"," $score"] y se devuelven como valores de matriz.

  • Especifique el orden de clasificación con sortBy: { "score": -1 }.

  • PlayerD y PlayerE empató como el elemento inferior. PlayerD se devuelve como la parte inferior score.

  • 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 ]
}
]

$bottom no se admite como expresión de agregación.

$bottom se admite window operator como.

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.

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 }
])

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.gameId En esteG1 caso,.

  • Usa para agrupar los $group resultados gameId por. En esteG1 caso,.

  • Especifica los campos que se generan para $bottom con output : ["$playerId"," $score"].

  • Utiliza sortBy: { "score": -1 } para ordenar las puntuaciones en orden descendente.

  • Utiliza $bottom para devolver la puntuación más baja del juego.

La operación devuelve los siguientes resultados:

[ { _id: 'G1', playerId: [ 'PlayerD', 1 ] } ]

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 $group para agrupar los resultados por gameId.

  • Utiliza $bottom para devolver el score inferior para cada juego.

  • Especifica los campos que se generan para $bottom con output : ["$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 ] }
]

Volver

$binarySize

En esta página