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.