Definição
Retorna o valor máximo. $max compara o valor e o tipo, usando a ordem de comparação BSON especificada para valores de tipos diferentes.
O acumulador $max está disponível nestes estágios:
Observação
Desambiguação
Esta página descreve $max quando usado como um acumulador. Acumuladores retornam um único valor agregado, como soma, máximo ou mínimo, em um grupo de documentos de entrada.
Você também pode usar $max nestes outros contextos:
$max (expression), que retorna o valor máximo de um array ou uma lista de valores.$max (window function), que é usado no estágio$setWindowFieldspara retornar o valor máximo de documentos em uma janela específica.
Sintaxe
{ $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, valores de entrada para $max forem null ou estiverem ausentes, $max considera apenas os valores não nulos e não ausentes.
Se **todos** os valores de entrada para forem $max null ou estiverem ausentes, $max nullretornará.
Operando de array
No estágio $group, se a expressão produz uma array, $max não percorrerá a array e compara a array como um todo.
Valores iguais
Se vários valores forem comparados como iguais, $max poderá retornar qualquer um desses valores. Não há garantias de qual valor igual $max retorna.
Por exemplo, em um agrupamento que não diferencia maiúsculas de minúsculas, "a" e "A" podem ser comparados como iguais. Não há garantias de qual será retornado.
Usar no estágio $group
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.
O exemplo a seguir usa $max em um estágio $group para encontrar a classificação IMDb mais alta e a duração mais longa para filmes em cada categoria de classificação:
db.movies.aggregate( [ { $match: { rated: { $in: [ "G", "PG", "PG-13", "R" ] }, "imdb.rating": { $gt: 0 }, runtime: { $gt: 0 } } }, { $sort: { rated: 1 } }, { $group: { _id: "$rated", maxImdbRating: { $max: "$imdb.rating" }, maxRuntime: { $max: "$runtime" } } }, { $sort: { _id: 1 } } ] )
O pipeline anterior:
Usa
$matchcomo filtro para filmes com uma classificação comum dos EUA, uma classificação IMDb válida e uma duração conhecida.Classifica documentos por
ratedpara garantir uma ordem de agrupamento consistente.Usa
$groupcom$maxpara encontrar a classificação IMDb mais alta e a duração mais longa para cada gruporated.Ordena a saída alfabeticamente por categoria de avaliação.