Počínaje verzí Mongo 4.2 , db.collection.update() může přijmout agregační kanál, což konečně umožňuje aktualizaci pole na základě jeho vlastní hodnoty; čímž se vyhnete neefektivním vzorcům hledání/vyhledávání.
Také jste se dívali na $inc operátor přidat den, ale nyní, když můžeme jako aktualizaci použít agregační kanál, $add lze použít operátor:
// { "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" }
-
První část
{ date : { $exists : true } }je vyhledávací dotaz, který filtruje, které dokumenty se mají aktualizovat (v našem případě všechny dokumenty sdatepole). -
Druhá část
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]je kanál agregace aktualizací (všimněte si hranatých závorek označujících použití kanálu agregace).$setje nový agregační operátor a alias$addFields. Potom lze v rámci$setpoužít libovolný agregační operátor etapa; v našem případě jednoduchý$addmezi existujícím datem a zobrazením dne v milisekundách.