MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $toDate

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.