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 ladatecampo). -
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).$setes un nuevo operador de agregación y un alias de$addFields. Entonces cualquier operador de agregación puede usarse dentro del$setescenario; en nuestro caso un simple$addición entre la fecha existente y la representación de un día en milisegundos.