sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $min

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.