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.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Menu Docs

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

{
$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 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:

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

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 $match para filtrar 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"].

  • Utiliza 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 classificação mais baixa do gênero.

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 $match para filtrar filmes de 2010a 2012 que têm uma classificação IMDb.

  • Utiliza $group para agrupar os resultados por year.

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

  • Especifica os campos que são de saída para $bottom com output : ["$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 $sort para classificar os resultados por ano em ordem crescente.