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ącedate
pole). -
Druga część
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
to potok agregacji aktualizacji (zwróć uwagę na nawiasy kwadratowe oznaczające użycie potoku agregacji).$set
to nowy operator agregacji i alias$addFields
. Następnie można użyć dowolnego operatora agregacji w ramach$set
scena; w naszym przypadku prosty$add
między istniejącą datą a reprezentacją dnia w milisekundach.