MongoDB tillhandahåller NOW
systemvariabel som låter dig få det aktuella datetime-värdet när du använder en aggregeringspipeline.
Detta kan vara användbart när du vill uppdatera ett dokument med aktuellt datum och tid.
Från och med MongoDB 4.2 kan uppdateringsmetoder acceptera en aggregeringspipeline. Därför NOW
kan användas som ett alternativ till $currentDate
fältuppdateringsoperatör för att ställa in aktuell datumtid när någon av uppdateringsmetoderna används.
För att komma åt NOW
systemvariabel, prefix den med två dollartecken och omge den inom citattecken ("$$NOW"
).
Exempel
Anta att vi har en samling som heter dogs
som innehåller följande dokument:
{ "_id" : 1, "name" : "Fetch", "weight" : 25 }
Här är ett exempel på hur du använder NOW
systemvariabel när du uppdaterar det dokumentet:
db.dogs.updateOne(
{ _id : 1 },
[
{ $set : { weight : 30, lastModified : "$$NOW" } }
]
)
Låt oss nu ta en titt på dokumentet igen:
db.dogs.find( { _id: 1 } ).pretty()
Resultat:
{ "_id" : 1, "name" : "Fetch", "weight" : 30, "lastModified" : ISODate("2021-01-27T01:29:32.833Z") }
lastModified
fältet har lagts till med ett Date-objekt som innehåller aktuellt datum och tid.
Det finns också en CLUSTER_TIME
systemvariabel som returnerar den aktuella tidsstämpeln, även om den bara är tillgänglig på replikuppsättningar och sönderdelade kluster.
Observera också att NOW
och CLUSTER_TIME
värdena förblir desamma under hela pipelinen.