Започвайки от 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
Разстояние между съществуващата дата и представянето на ден в милисекунди.