I MongoDB er $currentDate
operator indstiller værdien af et felt til den aktuelle dato.
Den kan indstilles som enten en Dato eller et tidsstempel type. Standard er Dato .
$currentDate
er en opdatering operatør, og kan kun bruges ved opdatering af dokumenter, ikke ved indsættelse af dem (selvom det kan bruges i upsert-operationer).
Eksempel
Antag, at vi har en samling kaldet dogs
med følgende dokument:
{
"_id" : 1,
"name" : "Wag",
"goodDog" : true,
"dateModified" : ISODate("2020-01-01T00:00:00Z")
}
Og vi ønsker at lave en ændring i dokumentet. Når vi foretager ændringen, skal vi opdatere dateModified
felt til datoen for ændringen.
Derfor kan vi bruge $currentDate
operatør for at indstille datoen til den aktuelle dato. Vi kan gøre sådan noget:
db.dogs.update(
{ _id: 1 },
{
$currentDate: {
dateModified: true
},
$set: {
goodDog: false
}
}
)
Her bruger vi dateModified: true
for at indstille datoen ved hjælp af Dato type (dette er en kortfattet måde at indstille det som en dato type).
Vi kan verificere resultatet ved at se på samlingen/dokumentet igen:
db.dogs.findOne()
Resultat:
{ "_id" : 1, "name" : "Wag", "goodDog" : false, "dateModified" : ISODate("2021-01-16T04:17:41.206Z") }
Vi kan se, at dateModified
feltet er blevet opdateret til den aktuelle dato (dvs. den dato/tid, hvor jeg kørte opdateringen). goodDog
feltet er også blevet opdateret som angivet.
Tidsstempler
Som standard $currentDate
bruger datoen type. Du kan alternativt angive typen i et dokument. Derfor kan du bruge {$type: timestamp}
så datoen opdateres til et tidsstempel BSON-type.
Eksempel:
db.dogs.update(
{ _id: 1 },
{
$currentDate: {
dateModified: { $type: "timestamp" }
},
$set: {
goodDog: true
}
}
)
I dette tilfælde leverede vi et dokument, der specificerede tidsstemplet type.
Du kan også bruge denne metode til datoen type (eller brug stenografimetoden som set i det foregående eksempel).
Tjek samlingen:
db.dogs.findOne()
Resultat:
{ "_id" : 1, "name" : "Wag", "goodDog" : true, "dateModified" : Timestamp(1610771023, 1) }