MongoDB tem um
$min
operador que permite atualizar o valor de um campo somente se o valor especificado for menor que o valor atual do campo. Em outras palavras, se o
$min
valor for menor que o valor atual no documento, o $min
valor é usado. Caso contrário, o valor do documento permanece inalterado. Exemplo
Suponha que tenhamos uma coleção chamada
golf
com o seguinte documento:{ "_id" : 1, "strokes" : 70 }
E imagine que atualizamos o documento após cada jogo de golfe com a pontuação mais recente. Neste caso, queremos apenas os
strokes
campo a ser atualizado se nossa pontuação mais recente for menor do que a nossa pontuação anterior. Neste caso, poderíamos usar o
$min
operador para alcançar esse resultado. Exemplo:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Esta mensagem nos informa que um documento correspondeu e foi atualizado.
Vamos verificar a coleção novamente.
db.golf.find()
Resultado:
{ "_id" : 1, "strokes" : 64 }
Podemos ver que os
strokes
campo foi atualizado com o novo valor. Isso ocorre porque 64 é menor que seu valor anterior de 70. Quando o valor é maior
Quando o valor especificado com
$min
for maior que o valor existente no documento, nada é atualizado. Exemplo:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Podemos ver pela mensagem que nada foi atualizado.
Vamos verificar a coleção novamente.
db.golf.find()
Resultado:
{ "_id" : 1, "strokes" : 64 }
Podemos ver que o valor permanece em 64, embora tenhamos tentado atualizá-lo para 72. Isso é esperado, pois usamos
$min
. Datas
Você pode usar
$min
nos campos de data. Suponha que temos uma
collection
denominada espécie com o seguinte documento:{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Vamos tentar atualizar a data com uma data posterior à data atual no documento.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Aqui, tentamos atualizar o ano de
2000
para 2001
. Dado que a nova data é posterior à existente, obtemos o seguinte:WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Nada foi atualizado.
Vamos conferir a coleção:
db.species.find()
Resultado:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Como esperado, o mesmo valor de data permanece.
Agora vamos tentar atualizá-lo com uma data anterior.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Podemos ver pela mensagem que o documento foi atualizado.
Vamos checar.
db.species.find()
Resultado:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
A data foi atualizada conforme o esperado.