Definição
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 (expression), que retorna os valores mínimos denem uma array.$minN (window function), que é usado no estágio$setWindowFieldspara retornar os valores mínimosnde documentos em uma janela específica.
Sintaxe
{ $minN: { input: <expression>, n: <expression> } }
Campo | Tipo | Descrição |
|---|---|---|
| Expressão | Uma expressão avaliada para cada documento de entrada para determinar os valores de entrada. O menor |
| Expressão | Determina o número máximo de resultados retornados por grupo. |
Comportamento
Tipo de resultado
Quando $minN compara valores de tipos diferentes, a ordem dos tipos segue a ordem de comparação BSON.
Valores nulos e ausentes
$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:
$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. Estes valores são ignorados.O campo
minimumThreeScoresé especificado como$minNcominput : "$score"e retornado como uma array.Como há apenas 3 documentos com
scores,$minNretorna o mínimo de campos 3score, emboran = 4.
[ { _id: 'G1', minimumThreeScores: [ 1, 2, 3 ] } ]
Comparação de acumuladores de $minN e $bottomN
Os acumuladores $minN e $bottomN retornam valores n de um grupo, mas diferem na forma como determinam quais valores devem ser retornados.
Use
$minNquando os valores que você deseja comparar forem os mesmos valores que você deseja retornar.$minNseleciona os menores valoresncomparando entradas diretamente.Use
$bottomNquando quiser definir a ordem de classificação separadamente da saída.$bottomNpermite que você especifique uma chavesortBypara determinar quais documentos são "bottom" e uma expressãooutputpara controlar quais valores retornar.
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 as três classificações mínimas para um único gênero
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
$matchpara filtrar os resultados para filmes ondeHorrorestá incluído na arraygenres.Utiliza
$grouppara agrupar todos os documentos correspondentes em um único grupo.Especifica a entrada para
$minNcominput: "$imdb.rating".Usa
$minNpara retornar as três entradas de classificação mais baixa do IMDb para o gêneroHorrorcomn: 3.
Encontre o mínimo de três classificações em vários gêneros
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
$unwindpara criar um documento separado para cada gênero na arraygenres.Utiliza
$grouppara agrupar os resultados porgenres.Usa
$minNpara retornar as três entradas de classificação mais baixa do IMDb para cada gênero comn: 3.Especifica a entrada para
$minNcominput: "$imdb.rating".Utiliza
$sortpara classificar os resultados alfabeticamente por gênero.Limita a saída a cinco documentos para melhorar a legibilidade.
Definir n dinamicamente com base na chave do grupo
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-13ouR.Agrupa filmes por
rated(a classificação do conteúdo).Especifica a entrada para
$minNcominput: "$imdb.rating".Usa a expressão
$condpara retornar3entradas mínimas paraRfilmes avaliados e1entrada 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.