Започвайки от Mongo 4.2 , db.collection.update() може да приеме конвейер за агрегиране, като накрая позволява актуализиране на поле въз основа на собствената му стойност; като по този начин се избягват неефективните шаблони за намиране/пренасочване.
Освен това разглеждахте $inc оператор за добавяне на ден, но сега, когато можем да използваме конвейер за агрегиране като актуализация, $add може да се използва оператор:
// { "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" }
-
Първата част
{ date : { $exists : true } }е заявката за съответствие, която филтрира кои документи да актуализира (в нашия случай всички документи сdateполе). -
Втората част
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]е тръбопроводът за обновяване на агрегиране (обърнете внимание на квадратните скоби, означаващи използването на конвейер за агрегиране).$setе нов оператор за агрегиране и псевдоним на$addFields. Тогава всеки оператор за агрегиране може да се използва в рамките на$setсцена; в нашия случай просто$addРазстояние между съществуващата дата и представянето на ден в милисекунди.