Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

$bottom (operador acumulador )

$bottom

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 um acumulador. Acumuladores retornam um único valor agregado em um grupo de documentos de entrada.

Você também pode usar $bottom nestes outros contextos:

{ $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 $sort. Não afeta a ordem dos documentos na saída do pipeline.

saída

Obrigatório

Representa a saída de cada elemento no grupo e pode ser qualquer expressão.

$bottom não filtra valores nulos, e $bottom converte valores ausentes em nulos.

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:

  • $documents cria os documentos literais que contêm as pontuações dos jogadores.

  • $group agrupa os documentos por gameId. Este exemplo tem apenas um gameId, G1.

  • PlayerD tem uma pontuação ausente e PlayerE tem um nulo score. Esses valores são considerados nulos.

  • Os campos playerId e score são especificados como output : ["$playerId"," $score"] e retornados como valores de array.

  • Especifique a ordem de classificação com sortBy: { "score": -1 }.

  • PlayerD e PlayerE empatado para o elemento inferior. PlayerD é retornado como o score inferior.

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.

Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

Você pode usar o acumulador $bottom para encontrar o filme menos avaliado 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 $match para filtro os resultados em um único gênero. Neste caso, Comedy.

  • Usa $group para agrupar todos os filmes de comédia em uma única chave de grupo "Comedy".

  • Especifica os campos que são de saída para $bottom com output : ["$title", "$imdb.rating"].

  • Usa sortBy: { "imdb.rating": -1 } para definir o elemento inferior em cada grupo como aquele com a classificação mais baixa.

  • Usa $bottom para retornar o filme com a classificação mais baixa para o gênero.

Você pode usar o acumulador de $bottom para encontrar o filme menos avaliado para 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 $match para filtrar filmes de 2010-2012 que têm uma classificação IMDb.

  • Utiliza $group para agrupar os resultados por year.

  • Usa $bottom para retornar o filme com a classificação mais baixa para cada ano.

  • Especifica os campos que são de saída para $bottom com output : ["$title", "$imdb.rating"].

  • Usa sortBy: { "imdb.rating": -1 } para definir o elemento inferior em cada grupo como aquele com a classificação mais baixa.

  • Usa $sort para classificar os resultados por ano em ordem crescente.