Starter i Mongo 4.2 , db.collection.update() kan acceptere en aggregeringspipeline, som endelig tillader opdatering af et felt baseret på dets egen værdi; dermed undgå ineffektive find/foreach-mønstre.
Du så også på $inc operatør for at tilføje en dag, men nu hvor vi kan bruge en aggregeringspipeline som en opdatering, er $add operator kan bruges:
// { "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" }
-
Den første del
{ date : { $exists : true } }er matchforespørgslen, der filtrerer hvilke dokumenter der skal opdateres (i vores tilfælde har alle dokumenterdatefelt). -
Den anden del
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]er opdaterings-aggregeringspipeline (bemærk de firkantede parenteser, der angiver brugen af en aggregeringspipeline).$seter en ny aggregeringsoperator og et alias for$addFields. Så kan enhver aggregeringsoperator bruges i$setscene; i vores tilfælde en simpel$addmellem den eksisterende dato og repræsentationen af en dag i millisekunder.