I MongoDB, $toDate
aggregeringsoperatorn konverterar ett värde till ett datum
$toDate
tar något giltigt uttryck. Om uttrycket inte kan konverteras till ett datum, returnerar det ett fel. Om uttrycket är null
eller saknas returnerar den null
.
Exempel
Anta att vi har en samling som heter samples
med följande dokument:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Vi kan använda följande fråga för att returnera vart och ett av dessa värden som ett datum.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Resultat:
{ "ObjectId" : ISODate("2021-01-19T05:33:16Z"), "double" : ISODate("2021-02-15T06:53:55.500Z"), "decimal" : ISODate("2021-02-15T06:53:55.500Z"), "long" : ISODate("2021-02-15T06:53:55.500Z"), "string" : ISODate("2021-02-15T06:53:55Z") }
Som förväntat returneras alla fält med motsvarande värden omvandlade till datumvärden.
Du kanske märker att ObjectId-fältet returnerar ett annat datum än de andra. Detta beror på att _id
fältets värde återspeglar datumet då dokumentet skapades, medan de andra datumen bara var godtyckliga datum skapade av mig. Mer om ObjectId nedan.
Indatatyper
$toDate
operatören accepterar följande inmatningstyper:
- Dubbel
- Decimal
- Lång
- Sträng (måste vara en giltig datumsträng)
- ObjectId
Mer om dessa nedan.
Numeriska typer
När du använder de numeriska typerna (dubbel, decimal och lång), $toDate
returnerar ett datum som motsvarar antalet millisekunder som representeras av värdet. För dubbel och decimal är detta det trunkerade värdet. $toDate
operatorn tolkar numeriska värden enligt följande:
- Ett positivt värde motsvarar antalet millisekunder sedan 1 januari 1970.
- Ett negativt värde motsvarar antalet millisekunder före 1 januari 1970.
Strängtyper
När du använder en strängtyp måste strängen vara en giltig datumsträng. Till exempel:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Du kan inte använda ofullständiga datum eller ogiltiga värden som "Monday"
, "March"
, "2020"
, etc.
ObjectId
ObjectId-värden är hexadecimala värden på 12 byte som består av:
- Ett tidsstämpelvärde på 4 byte, som representerar objekt-ID:ts skapelse, mätt i sekunder sedan Unix-epoken.
- En 5 byte är ett slumpmässigt värde
- En 3-byte inkrementerande räknare, initierad till ett slumpmässigt värde.
$toDate
operatören returnerar tidsstämpeldelen som ett datum.