Począwszy od Mongo 4.2 , db.collection.update() może zaakceptować potok agregacji, ostatecznie umożliwiając aktualizację pola na podstawie jego własnej wartości; unikając w ten sposób nieefektywnych wzorców wyszukiwania/foreach.
Patrzyłeś też na $inc operatora, aby dodać dzień, ale teraz, gdy możemy użyć potoku agregacji jako aktualizacji, $add można użyć operatora:
// { "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" }
-
Pierwsza część
{ date : { $exists : true } }to zapytanie dopasowujące, filtrujące dokumenty do aktualizacji (w naszym przypadku wszystkie dokumenty mającedatepole). -
Druga część
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]to potok agregacji aktualizacji (zwróć uwagę na nawiasy kwadratowe oznaczające użycie potoku agregacji).$setto nowy operator agregacji i alias$addFields. Następnie można użyć dowolnego operatora agregacji w ramach$setscena; w naszym przypadku prosty$addmiędzy istniejącą datą a reprezentacją dnia w milisekundach.