Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$bottom (operador de acumulación)

$bottom

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

Disponible en estas fases:

Nota

Desambiguación

Esta página describe $bottom cuando se utiliza como acumulador. Los acumuladores devuelven un único valor agregado a partir de un grupo de documentos de entrada.

También puede utilizar $bottom (window function) en la etapa $setWindowFields para devolver el elemento inferior de los documentos en una ventana en particular.

{
$bottom:
{
sortBy: { <field1>: <sort order>, <field2>: <sort order> ... },
output: <expression>
}
}
Campo
Necesidad
Descripción

sortBy

Requerido

Define el orden de clasificación de los elementos dentro de cada grupo, con una sintaxis similar a $sort. No afecta el orden de los documentos en la salida del pipeline.

salida

Requerido

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

$bottom no filtra los valores nulos, y $bottom convierte los valores faltantes en nulos.

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

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 }
}
}
}
}
] )
[
{
_id: 'G1',
playerId: [ 'PlayerD', null ]
}
]

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.

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

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.

Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargar el conjunto de datos de ejemplo. Si realizó alguna modificación en las bases de datos de ejemplo, es posible que deba eliminarlas y volver a crearlas para ejecutar los ejemplos de esta página.

Puedes usar el acumulador $bottom para encontrar la película peor valorada en un solo género.

db.movies.aggregate( [
{
$match : { genres: "Comedy" }
},
{
$group:
{
_id: "Comedy",
lowestRatedMovie:
{
$bottom:
{
output: [ "$title", "$imdb.rating" ],
sortBy: { "imdb.rating": -1 }
}
}
}
}
] )

La pipeline de ejemplo:

  • Utiliza $match para filtrar los resultados por un solo género. En este caso, Comedy.

  • Utiliza $group para agrupar todas las películas de comedia bajo una única clave de grupo "Comedy".

  • Especifica los campos que se muestran para $bottom con output : ["$title", "$imdb.rating"].

  • Utiliza sortBy: { "imdb.rating": -1 } para definir el elemento inferior de cada grupo como aquel con la calificación más baja.

  • Utiliza $bottom para devolver la película peor valorada del género.

Puedes usar el acumulador $bottom para encontrar la película peor valorada de cada año.

db.movies.aggregate( [
{
$match: {
"imdb.rating": { $exists: true },
year: { $gte: 2010, $lte: 2012 }
}
},
{
$group:
{
_id: "$year",
lowestRatedMovie:
{
$bottom:
{
output: [ "$title", "$imdb.rating" ],
sortBy: { "imdb.rating": -1 }
}
}
}
},
{
$sort: { _id: 1 }
}
] )

La pipeline de ejemplo:

  • Utiliza $match para filtrar películas de 2010-2012 que tengan una calificación de IMDb.

  • Utiliza $group para agrupar los resultados por year.

  • Utiliza $bottom para devolver la película peor valorada de cada año.

  • Especifica los campos que se muestran para $bottom con output : ["$title", "$imdb.rating"].

  • Utiliza sortBy: { "imdb.rating": -1 } para definir el elemento inferior de cada grupo como aquel con la calificación más baja.

  • Utiliza $sort para ordenar los resultados por año en orden ascendente.