Definição
Retorna o valor máximo de documentos em uma janela específica.
Observação
Desambiguação
Esta página descreve $max quando usado como uma função de janela.
Você também pode usar $max nestes outros contextos:
$max (accumulator), que retorna o valor máximo em um grupo de documentos de entrada.$max (expression), que retorna o valor máximo de uma array ou de uma lista de valores.
Sintaxe
{ $setWindowFields: { ... output: { <field>: { $max: <expression> } } } }
Comportamento
Tipo de resultado
$max compara dados de entrada seguindo a ordem de Comparação BSON para determinar o tipo de saída apropriado. Quando os dados de entrada contêm vários tipos de dados, o tipo de saída $max é o mais alto na ordem de comparação.
Valores nulos e ausentes
Se alguns, mas não todos, documentos na janela tiverem um valor null para o campo ou estiverem faltando o campo, $min os ignorará. Considera apenas os valores não nulos e não ausentes.
Se todos os documentos na janela tiverem um valor null para o campo ou estiverem faltando o campo, $min retornará null.
Operando de array
No estágio $setWindowFields, se a expressão se resolver em uma array, $max não percorrerá a array e compara a array como um todo.
Exemplo
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.
Este exemplo usa $max no estágio $setWindowFields para gerar a classificação mais alta do IMDb para filmes bem avaliados em 1999 e 2000. Para cada filme, o pipeline adiciona um campo contendo a classificação mais alta do IMDb em todos os filmes daquele ano:
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2000 ] }, "imdb.rating": { $gte: 8.5 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": 1 }, output: { highestRatingInYear: { $max: "$imdb.rating", window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, highestRatingInYear: 1 } }, { $sort: { year: 1, "imdb.rating": 1 } } ] )
No pipeline anterior:
$matchfiltros para filmes de 1999 e 2000 com uma classificação da IMDb de 8.5 ou superior.$setWindowFieldsdivide os filmes poryeare os classifica porimdb.ratingem ordem crescente dentro de cada partição. A função de janela$maxusa uma janela de documentos com limites inferior e superiorunbounded, abrangendo toda a partição.$maxretorna oimdb.ratingmais alto em todos os documentos na partição de cada ano.$projectlimita a saída atitle,year,imdb.ratinge o campohighestRatingInYearcomputado.$sortordena os resultados por ano e, em seguida, por classificação do IMDb em ordem crescente.