Beginnend in Mongo 4.2
, db.collection.update()
kan een aggregatiepijplijn accepteren, waardoor uiteindelijk een veld kan worden bijgewerkt op basis van zijn eigen waarde; waardoor inefficiënte zoek-/foreach-patronen worden vermeden.
Je keek ook naar de $inc
operator om een dag toe te voegen, maar nu we een aggregatiepijplijn als update kunnen gebruiken, is de $add
operator kan worden gebruikt:
// { "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" }
-
Het eerste deel
{ date : { $exists : true } }
is de match-query, die filtert welke documenten moeten worden bijgewerkt (in ons geval alle documenten met dedate
veld). -
Het tweede deel
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
is de update-aggregatiepijplijn (let op de vierkante haakjes die het gebruik van een aggregatiepijplijn aangeven).$set
is een nieuwe aggregatie-operator en een alias van$addFields
. Dan kan elke aggregatie-operator worden gebruikt binnen de$set
fase; in ons geval een simpele$add
tussen de bestaande datum en de weergave van een dag in milliseconden.