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 dokumenterdate
felt). -
Den anden del
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
er opdaterings-aggregeringspipeline (bemærk de firkantede parenteser, der angiver brugen af en aggregeringspipeline).$set
er en ny aggregeringsoperator og et alias for$addFields
. Så kan enhver aggregeringsoperator bruges i$set
scene; i vores tilfælde en simpel$add
mellem den eksisterende dato og repræsentationen af en dag i millisekunder.