Definición
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.
Sintaxis
{ $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 |
salida | Requerido | Representa la salida para cada elemento del grupo y puede ser cualquier expresión. |
Comportamiento
Valores nulos y faltantes
$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:
$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.Especifique el orden de clasificación con
sortBy: { "score": -1 }.PlayerDyPlayerEempató como el elemento inferior.PlayerDse devuelve como la parte inferiorscore.
Restricciones
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
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.
Encuentra la calificación más baja en un género
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
$matchpara filtrar los resultados por un solo género. En este caso,Comedy.Utiliza
$grouppara agrupar todas las películas de comedia bajo una única clave de grupo"Comedy".Especifica los campos que se muestran para
$bottomconoutput : ["$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
$bottompara devolver la película peor valorada del género.
Encuentra la calificación más baja a lo largo de varios años.
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
$matchpara filtrar películas de 2010-2012 que tengan una calificación de IMDb.Utiliza
$grouppara agrupar los resultados poryear.Utiliza
$bottompara devolver la película peor valorada de cada año.Especifica los campos que se muestran para
$bottomconoutput : ["$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
$sortpara ordenar los resultados por año en orden ascendente.