Definição
$maxO operador
$maxatualiza o valor do campo para um valor especificado se o valor especificado for maior que o valor atual do campo. O operador$maxpode comparar valores de diferentes tipos, usando a ordem de comparação BSON.A expressão do operador
$maxtem o formato:{ $max: { <field1>: <value1>, ... } } Para especificar um
<field>em um documento incorporado ou em uma array, use a notação de ponto.
Comportamento
A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.
Se o campo não existe, o operador $max define o campo para o valor especificado.
A partir do MongoDB 5.0, mongod não gera mais um erro ao usar um operador de atualização como $max com uma expressão de operando vazia ( { } ). Uma atualização vazia não resulta em alteração e nenhuma entrada no oplog é criada (o que significa que é sem operação).
Exemplos
Use $max para comparar números
Crie a coleção scores:
db.scores.insertOne( { _id: 1, highScore: 800, lowScore: 200 } )
O highScore do documento tem atualmente o valor 800. A seguinte operação:
Compara o
highscore, 800, com o valor especificado, 950Atualiza
highScorepara 950, pois 950 é maior que 800
db.scores.updateOne( { _id: 1 }, { $max: { highScore: 950 } } )
A coleção scores agora contém o seguinte documento modificado:
{ _id: 1, highScore: 950, lowScore: 200 }
A próxima operação não tem efeito desde o valor de highScore, 950, é maior que 870:
db.scores.updateOne( { _id: 1 }, { $max: { highScore: 870 } } )
O documento permanece inalterado na coleção scores:
{ _id: 1, highScore: 950, lowScore: 200 }
Use $max para comparar datas
Crie a coleção tags:
db.tags.insertOne( { _id: 1, desc: "crafts", dateEntered: ISODate("2013-10-01T05:00:00Z"), dateExpired: ISODate("2013-10-01T16:38:16.163Z") } )
A seguinte operação compara o valor atual do campo dateExpired, ISODate("2013-10-01T16:38:16.163Z"), com a data especificada new Date("2013-09-30") para determinar se deseja atualizar o campo:
db.tags.updateOne( { _id: 1 }, { $max: { dateExpired: new Date("2013-09-30") } } )
new Date("2013-09-30") não é a data mais recente, então a operação não atualiza o campo dateExpired :
{ _id: 1, desc: "decorative arts", dateEntered: ISODate("2013-10-01T05:00:00Z"), dateExpired: ISODate("2013-10-01T16:38:16.163Z") }