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

¿Cómo se incrementan correctamente muchas fechas en mongoDB?

A partir de Mongo 4.2 , db.collection.update() puede aceptar una tubería de agregación, permitiendo finalmente la actualización de un campo en función de su propio valor; evitando así patrones de búsqueda/foreach ineficientes.

Además, estabas mirando el $inc operador para agregar un día, pero ahora que podemos usar una canalización de agregación como una actualización, el $add se puede usar el operador:

// { "date" : ISODate("2020-04-05T07:14:17.802Z"), "x" : "y" }
db.collection.updateMany(
  { date : { $exists : true } },
  [{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
)
// { "date" : ISODate("2020-04-06T07:14:17.802Z"), "x" : "y" }
  • La primera parte { date : { $exists : true } } es la consulta de coincidencia, filtrando qué documentos actualizar (en nuestro caso, todos los documentos que tienen la date campo).

  • La segunda parte [{ $set: { date: { $add: ["$date", 24*60*60000] } } }] es la canalización de agregación de actualización (tenga en cuenta los corchetes que indican el uso de una canalización de agregación). $set es un nuevo operador de agregación y un alias de $addFields . Entonces cualquier operador de agregación puede usarse dentro del $set escenario; en nuestro caso un simple $add ición entre la fecha existente y la representación de un día en milisegundos.