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

$minN (acúmulo de agregação)

$minN

Retorna os valores mínimos de n dentro de um grupo. Se o grupo tiver menos de n elementos, $minN retornará todos os elementos no grupo.

Observação

Desambiguação

Esta página descreve $minN quando usado como acumulador. Os acumuladores retornam um valor agregado como soma, máximo ou mínimo em um grupo de documentos de entrada.

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

{
$minN:
{
input: <expression>,
n: <expression>
}
}
Campo
Tipo
Descrição

input

Expressão

Uma expressão avaliada para cada documento de entrada para determinar os valores de entrada. O menor n desses valores é retido para cada grupo.

n

Expressão

Determina o número máximo de resultados retornados por grupo. n deve avaliar para um número inteiro positivo.

Quando $minN compara valores de tipos diferentes, a ordem dos tipos segue a ordem de comparação BSON.

$minN filtra valores nulos e ausentes.

Considere a seguinte agregação que retorna os valores mínimos de n de um grupo:

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",
minimumThreeScores:
{
$minN:
{
input: "$score",
n: 4
}
}
}
}
] )

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. Estes valores são ignorados.

  • O campo minimumThreeScores é especificado como $minN com input : "$score" e retornado como uma array.

  • Como há apenas 3 documentos com scores, $minN retorna o mínimo de campos 3 score, embora n = 4.

[
{
_id: 'G1',
minimumThreeScores: [ 1, 2, 3 ]
}
]

Os acumuladores $minN e $bottomN retornam valores n de um grupo, mas diferem na forma como determinam quais valores devem ser retornados.

  • Use $minN quando os valores que você deseja comparar forem os mesmos valores que você deseja retornar. $minN seleciona os menores valores n comparando entradas diretamente.

  • Use $bottomN quando quiser definir a ordem de classificação separadamente da saída. $bottomN permite que você especifique uma chave sortBy para determinar quais documentos são "bottom" e uma expressão output para controlar quais valores retornar.

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 $minN para encontrar as três classificações mais baixas do IMDb em um único gênero.

db.movies.aggregate( [
{
$match: { genres: "Horror" }
},
{
$group:
{
_id: "Horror",
minThreeRatings:
{
$minN:
{
input: "$imdb.rating",
n: 3
}
}
}
}
] )

O exemplo de pipeline:

  • Utiliza $match para filtrar os resultados para filmes onde Horror está incluído na array genres.

  • Utiliza $group para agrupar todos os documentos correspondentes em um único grupo.

  • Especifica a entrada para $minN com input: "$imdb.rating".

  • Usa $minN para retornar as três entradas de classificação mais baixa do IMDb para o gênero Horror com n: 3.

Você pode usar o acumulador $minN para encontrar as classificações mínimas de n no IMDb em cada gênero.

db.movies.aggregate( [
{
$unwind: "$genres"
},
{
$group:
{
_id: "$genres",
minThreeRatings:
{
$minN:
{
input: "$imdb.rating",
n: 3
}
}
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

O exemplo de pipeline:

  • Usa $unwind para criar um documento separado para cada gênero na array genres.

  • Utiliza $group para agrupar os resultados por genres.

  • Usa $minN para retornar as três entradas de classificação mais baixa do IMDb para cada gênero com n: 3.

  • Especifica a entrada para $minN com input: "$imdb.rating".

  • Utiliza $sort para classificar os resultados alfabeticamente por gênero.

  • Limita a saída a cinco documentos para melhorar a legibilidade.

Você pode atribuir o valor de n dinamicamente. Neste exemplo, a expressão $cond é utilizada no camporated.

db.movies.aggregate( [
{ $match: { rated: { $in: [ "G", "PG", "PG-13", "R" ] } } },
{
$group:
{
_id: { "rated": "$rated" },
minMovies:
{
$minN:
{
input: "$imdb.rating",
n: { $cond: { if: { $eq: [ "$rated", "R" ] }, then: 3, else: 1 } }
}
}
}
}
] )

O exemplo de pipeline:

  • Filtros para filmes com classificações de G, PG, PG-13 ou R.

  • Agrupa filmes por rated (a classificação do conteúdo).

  • Especifica a entrada para $minN com input: "$imdb.rating".

  • Usa a expressão $cond para retornar 3 entradas mínimas para R filmes avaliados e 1 entrada mínima para todas as outras classificações.

Na saída, a classificação R retorna 3 entradas, enquanto as classificações G, PG e PG-13 retornam 1 entrada.