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 ladate
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.