In MongoDB der $toDate
Aggregationsoperator wandelt einen Wert in ein Datum um
$toDate
nimmt jeden gültigen Ausdruck an. Wenn der Ausdruck nicht in ein Datum konvertiert werden kann, wird ein Fehler zurückgegeben. Wenn der Ausdruck null
ist oder fehlt, wird null
zurückgegeben .
Beispiel
Angenommen, wir haben eine Sammlung namens samples
mit folgendem Dokument:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Wir können die folgende Abfrage verwenden, um jeden dieser Werte als Datum zurückzugeben.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Ergebnis:
{ "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") }
Wie erwartet werden alle Felder mit ihren entsprechenden Werten zurückgegeben, die in Datumswerte umgewandelt wurden.
Möglicherweise stellen Sie fest, dass das Feld „ObjectId“ ein anderes Datum als die anderen zurückgibt. Das liegt daran, dass die _id
Der Wert des Felds spiegelt das Datum wider, an dem das Dokument erstellt wurde, während die anderen Daten nur willkürliche Daten waren, die von mir erstellt wurden. Mehr über die ObjectId weiter unten.
Eingabetypen
Das $toDate
Der Operator akzeptiert die folgenden Eingabetypen:
- Doppelt
- Dezimal
- Lang
- Zeichenfolge (muss eine gültige Datumszeichenfolge sein)
- Objekt-ID
Mehr dazu weiter unten.
Numerische Typen
Bei Verwendung der numerischen Typen (Double, Decimal und Long) $toDate
gibt ein Datum zurück, das der Anzahl von Millisekunden entspricht, die durch den Wert dargestellt wird. Bei Double und Decimal ist dies der abgeschnittene Wert. Das $toDate
Operator interpretiert numerische Werte wie folgt:
- Ein positiver Wert entspricht der Anzahl der Millisekunden seit dem 1. Januar 1970.
- Ein negativer Wert entspricht der Anzahl von Millisekunden vor dem 1. Januar 1970.
String-Typen
Bei Verwendung eines Zeichenfolgentyps muss die Zeichenfolge eine gültige Datumszeichenfolge sein. Zum Beispiel:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Sie können keine unvollständigen Datumsangaben oder ungültige Werte wie "Monday"
verwenden , "March"
, "2020"
usw.
Objekt-ID
ObjectId-Werte sind 12-Byte-Hexadezimalwerte, die aus Folgendem bestehen:
- Ein 4-Byte-Zeitstempelwert, der die Erstellung der ObjectId darstellt, gemessen in Sekunden seit der Unix-Epoche.
- Ein 5 Byte ist ein Zufallswert
- Ein inkrementierender 3-Byte-Zähler, initialisiert auf einen zufälligen Wert.
Das $toDate
Der Operator gibt den Teil des Zeitstempels als Datum zurück.