Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$bottom (operador de acumulación)

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

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).

{
$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 para cada elemento del grupo y puede ser cualquier expresión.

Considera la siguiente agregación que devuelve el documento más bajo de un grupo de puntuaciones:

  • $bottom no filtra los valores nulos.

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

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

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

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

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

  • Especifica 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 empate más determinista para múltiples valores nulos, añada más campos a sortBy.

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

$bottom no es compatible como expresión de agregación.

$bottom es compatible como un window operator.

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

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 $match para filtrar los resultados en un solo gameId. En este caso, G1.

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

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

  • Utiliza sortBy: { "score": -1 } para ordenar los puntajes 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 ] } ]

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

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

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

Volver

$avg

En esta página