MongoDB tiene un $min
operador que le permite actualizar el valor de un campo solo si el valor especificado es menor que el valor actual del campo.
En otras palabras, si el $min
el valor es menor que el valor actual en el documento, el $min
se utiliza el valor. De lo contrario, el valor del documento permanece sin cambios.
Ejemplo
Supongamos que tenemos una colección llamada golf
con el siguiente documento:
{ "_id" : 1, "strokes" : 70 }
E imagina que actualizamos el documento después de cada juego de golf con la última puntuación. En este caso, solo querríamos los strokes
campo que se actualizará si nuestra última puntuación fue inferior que nuestra puntuación anterior.
En este caso podríamos usar el $min
operador para lograr ese resultado.
Ejemplo:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Este mensaje nos dice que un documento coincidió y se actualizó.
Revisemos la colección nuevamente.
db.golf.find()
Resultado:
{ "_id" : 1, "strokes" : 64 }
Podemos ver que los strokes
El campo se actualizó con el nuevo valor. Esto se debe a que 64 es inferior a su valor anterior de 70.
Cuando el valor es mayor
Cuando el valor especificado con $min
es mayor que el valor existente en el documento, no se actualiza nada.
Ejemplo:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Podemos ver por el mensaje que no se actualizó nada.
Revisemos la colección nuevamente.
db.golf.find()
Resultado:
{ "_id" : 1, "strokes" : 64 }
Podemos ver que el valor permanece en 64, aunque intentamos actualizarlo a 72. Esto es de esperar, porque usamos $min
.
Fechas
Puedes usar $min
en los campos de fecha.
Supongamos que tenemos una collection
denominada especie con el siguiente documento:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Intentemos actualizar la fecha con una fecha posterior a la fecha actual del documento.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Aquí, tratamos de actualizar el año desde 2000
a 2001
. Dado que la nueva fecha es posterior a la existente, obtenemos lo siguiente:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
No se actualizó nada.
Revisemos la colección:
db.species.find()
Resultado:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Como era de esperar, se mantiene el mismo valor de fecha.
Ahora intentemos actualizarlo con una fecha anterior.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Podemos ver por el mensaje que el documento fue actualizado.
Vamos a comprobar.
db.species.find()
Resultado:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
La fecha se actualizó como se esperaba.