Definição
Retorna o elemento inferior de um grupo de acordo com a ordem de classificação especificada.
Disponível nestes estágios:
Observação
Desambiguação
Esta página descreve $bottom quando usado como acumulador. Os acumuladores retornam um único valor agregado em um grupo de documentos de entrada.
Você também pode usar o $bottom (window function) no estágio $setWindowFields para retornar o elemento inferior dos documentos em uma janela específica.
Sintaxe
{ $bottom: { sortBy: { <field1>: <sort order>, <field2>: <sort order> ... }, output: <expression> } }
Campo | necessidade | Descrição |
|---|---|---|
sortBy | Obrigatório | Define a ordem de classificação dos elementos dentro de cada grupo, com sintaxe semelhante a |
saída | Obrigatório | Representa a saída de cada elemento no grupo e pode ser qualquer expressão. |
Comportamento
Valores nulos e ausentes
$bottom não filtra valores nulos e $bottom converte valores ausentes em nulo.
Considere a seguinte agregação que retorna o documento inferior de um grupo de pontuações:
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 ] } ]
Neste exemplo:
$documentscria os documentos literais que contêm as pontuações dos jogadores.$groupagrupa os documentos porgameId. Este exemplo tem apenas umgameId,G1.PlayerDtem uma pontuação ausente ePlayerEtem um nuloscore. Esses valores são considerados nulos.Os campos
playerIdescoresão especificados comooutput : ["$playerId"," $score"]e retornados como valores de array.Especifique a ordem de classificação com
sortBy: { "score": -1 }.PlayerDePlayerEempatado para o elemento inferior.PlayerDé retornado como oscoreinferior.
Restrições
Considerações sobre o limite de memória
Os pipelines de agregação que chamam $bottom estão sujeitos ao limite de 100 MB. Se esse limite for excedido para um grupo individual, a agregação falhará com um erro.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Encontre a classificação inferior em um gênero
Você pode usar o acumulador $bottom para encontrar o filme com classificação mais baixa em um único gênero.
db.movies.aggregate( [ { $match : { genres: "Comedy" } }, { $group: { _id: "Comedy", lowestRatedMovie: { $bottom: { output: [ "$title", "$imdb.rating" ], sortBy: { "imdb.rating": -1 } } } } } ] )
O exemplo de pipeline:
Utiliza
$matchpara filtrar os resultados em um único gênero. Neste caso,Comedy.Usa
$grouppara agrupar todos os filmes de Comédia em uma única chave de grupo"Comedy".Especifica os campos que são de saída para
$bottomcomoutput : ["$title", "$imdb.rating"].Utiliza
sortBy: { "imdb.rating": -1 }para definir o elemento inferior em cada grupo como aquele com a classificação mais baixa.Usa
$bottompara retornar o filme com classificação mais baixa do gênero.
Encontre a classificação inferior em vários anos
Você pode usar o acumulador $bottom para encontrar o filme com classificação mais baixa de cada ano.
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 } } ] )
O exemplo de pipeline:
Usa
$matchpara filtrar filmes de 2010a 2012 que têm uma classificação IMDb.Utiliza
$grouppara agrupar os resultados poryear.Usa
$bottompara retornar o filme com classificação mais baixa de cada ano.Especifica os campos que são de saída para
$bottomcomoutput : ["$title", "$imdb.rating"].Utiliza
sortBy: { "imdb.rating": -1 }para definir o elemento inferior em cada grupo como aquele com a classificação mais baixa.Utiliza
$sortpara classificar os resultados por ano em ordem crescente.