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 sdate
pole). -
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).$set
je nový agregační operátor a alias$addFields
. Potom lze v rámci$set
použít libovolný agregační operátor etapa; v našem případě jednoduchý$add
mezi existujícím datem a zobrazením dne v milisekundách.