V MongoDB, $toDate
agregační operátor převede hodnotu na datum
$toDate
přebírá jakýkoli platný výraz. Pokud výraz nelze převést na datum, vrátí chybu. Pokud je výraz null
nebo chybí, vrátí null
.
Příklad
Předpokládejme, že máme kolekci nazvanou samples
s následujícím dokumentem:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Můžeme použít následující dotaz k vrácení každé z těchto hodnot jako Datum.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Výsledek:
{ "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") }
Podle očekávání jsou všechna pole vrácena s odpovídajícími hodnotami převedenými na hodnoty Date.
Můžete si všimnout, že pole ObjectId vrací jiné datum než ostatní. Důvodem je _id
hodnota pole odráží datum, kdy byl dokument vytvořen, zatímco ostatní data byla pouze libovolná data vytvořená mnou. Více o ObjectId níže.
Typy vstupu
$toDate
operátor přijímá následující typy vstupu:
- Dvojité
- Desetinné
- Dlouhé
- Řetězec (musí jít o platný řetězec data)
- ObjectId
Více o nich níže.
Číselné typy
Při použití číselných typů (Double, Decimal a Long), $toDate
vrátí datum, které odpovídá počtu milisekund reprezentovaných hodnotou. Pro Double a Decimal se jedná o zkrácenou hodnotu. $toDate
operátor interpretuje číselné hodnoty následovně:
- Pozitivní hodnota odpovídá počtu milisekund od 1. ledna 1970.
- Záporná hodnota odpovídá počtu milisekund před 1. lednem 1970.
Typy řetězců
Při použití typu řetězce musí být řetězec platným datem. Například:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Nelze použít neúplná data nebo neplatné hodnoty, jako je "Monday"
, "March"
, "2020"
, atd.
ID objektu
Hodnoty ObjectId jsou 12bajtové hexadecimální hodnoty, které se skládají z:
- Čtyřbajtová hodnota časového razítka představující vytvoření ObjectId, měřená v sekundách od epochy Unixu.
- 5 bajtů je náhodná hodnota
- 3bajtový inkrementační čítač, inicializovaný na náhodnou hodnotu.
$toDate
operátor vrátí část časového razítka jako datum.