In MongoDB, the $currentDate operator sets the value of a field to the current date.
It can be set as either a Date or a timestamp type. The default is Date.
$currentDate is an update operator, and can only be used when updating documents, not when inserting them (although it can be used in upsert operations).
Example
Suppose we have a collection called dogs with the following document:
{
"_id" : 1,
"name" : "Wag",
"goodDog" : true,
"dateModified" : ISODate("2020-01-01T00:00:00Z")
}
And we want to make a change to the document. When we make the change, we need to update the dateModified field to the date of the change.
Therefore, we can use the $currentDate operator to set the date to the current date. We can do something like this:
db.dogs.update(
{ _id: 1 },
{
$currentDate: {
dateModified: true
},
$set: {
goodDog: false
}
}
)
Here, we use dateModified: true to set the date using the Date type (this is a shorthand way of setting it as a Date type).
We can verify the result by looking at the collection/document again:
db.dogs.findOne()
Result:
{
"_id" : 1,
"name" : "Wag",
"goodDog" : false,
"dateModified" : ISODate("2021-01-16T04:17:41.206Z")
}
We can see that the dateModified field has been updated to the current date (i.e. the date/time that I ran the update). The goodDog field has also been updated as specified.
Timestamps
By default $currentDate uses the Date type. You can alternatively specify the type in a document. Therefore, you can use {$type: timestamp} so that the date is updated to a timestamp BSON type.
Example:
db.dogs.update(
{ _id: 1 },
{
$currentDate: {
dateModified: { $type: "timestamp" }
},
$set: {
goodDog: true
}
}
)
In this case, we provided a document that specified the timestamp type.
You can also use this method for the Date type (or use the shorthand method as seen in the previous example).
Check the collection:
db.dogs.findOne()
Result:
{
"_id" : 1,
"name" : "Wag",
"goodDog" : true,
"dateModified" : Timestamp(1610771023, 1)
}