A partire da Mongo 4.2
, db.collection.update()
può accettare una pipeline di aggregazione, consentendo infine l'aggiornamento di un campo in base al proprio valore; evitando così schemi di ricerca/foreach inefficienti.
Inoltre, stavi guardando il $inc
operatore per aggiungere un giorno, ma ora che possiamo utilizzare una pipeline di aggregazione come aggiornamento, il $add
operatore può essere utilizzato:
// { "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 prima parte
{ date : { $exists : true } }
è la query di corrispondenza, che filtra quali documenti aggiornare (nel nostro caso tutti i documenti che hanno ladate
campo). -
La seconda parte
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
è la pipeline di aggregazione degli aggiornamenti (notare le parentesi quadre che indicano l'uso di una pipeline di aggregazione).$set
è un nuovo operatore di aggregazione e un alias di$addFields
. Quindi qualsiasi operatore di aggregazione può essere utilizzato all'interno di$set
fase; nel nostro caso un semplice$add
izione tra la data esistente e la rappresentazione di un giorno in millisecondi.