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

5 Möglichkeiten, die Millisekunden von einem Datum in MongoDB zu erhalten

Dieser Artikel stellt 5 Möglichkeiten vor, den Millisekunden-Teil von einem Date-Objekt in MongoDB zurückzugeben.

Beispieldaten

Angenommen, wir haben eine Sammlung namens cats mit folgenden Dokumenten:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }

Die folgenden Beispiele demonstrieren verschiedene Optionen zum Zurückgeben des Millisekunden-Teils von born Bereich dieser Dokumente.

Die $millisecond Betreiber

Die $millisecond -Operator wurde speziell entwickelt, um ein Dokument mit dem Millisekunden-Anteil eines bestimmten Datums zurückzugeben.

Wir können den folgenden Code ausführen, um den Millisekundenanteil von born zurückzugeben Feld im obigen Dokument.

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthMillisecond: { $millisecond: "$born" }
        }
    }
  ]
)

Ergebnis:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

Die $millisecond Der Operator akzeptiert auch eine timezone Streit.

Siehe MongoDB $millisecond für weitere Informationen und Beispiele.

Der $dateToString Betreiber

Der $dateToString -Operator konvertiert ein Datumsobjekt gemäß einem benutzerdefinierten Format in eine Zeichenfolge. Der Benutzer kann daher festlegen, dass bei Bedarf nur der Millisekunden-Anteil zurückgegeben wird.

Es gibt Formatbezeichner für jeden Datumsteil. Der %L Der Formatbezeichner gibt den Millisekundenteil zurück (3 Ziffern, mit Nullen aufgefüllt).

Beispiel:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
       }
     }
   ]
)

Ergebnis:

{ "birthMillisecond" : "123" }
{ "birthMillisecond" : "112" }
{ "birthMillisecond" : "007" }

Siehe MongoDB $dateToString für weitere Informationen und Beispiele.

Die $dateToParts Betreiber

Die $dateToParts -Operator gibt ein Dokument zurück, das die Bestandteile eines bestimmten BSON-Datumswerts als einzelne Eigenschaften enthält. Die zurückgegebenen Eigenschaften sind year , month , day , hour , minute , second und millisecond .

Wir könnten daher $dateToParts verwenden in einer Pipelinestufe, fügen Sie dann eine weitere Pipelinestufe hinzu, die die millisecond extrahiert Teil.

Hier ist was $dateToParts Renditen für unsere drei Dokumente:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    }
  ]
).pretty()

Ergebnis:

{
	"dateParts" : {
		"year" : 2021,
		"month" : 1,
		"day" : 3,
		"hour" : 23,
		"minute" : 30,
		"second" : 15,
		"millisecond" : 123
	}
}
{
	"dateParts" : {
		"year" : 2019,
		"month" : 12,
		"day" : 8,
		"hour" : 4,
		"minute" : 0,
		"second" : 20,
		"millisecond" : 112
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 45,
		"second" : 1,
		"millisecond" : 7
	}
}

Dieses Ergebnis kann dann an die nächste Stufe in der Pipeline weitergegeben werden, und wir können daher nur die millisecond extrahieren Feld in der nächsten Stufe.

Folgendes passiert, wenn wir nur für die millisecond eine weitere Projektion hinzufügen Feld:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    },
    {
      $project:
        {
          birthMillisecond: "$dateParts.millisecond"
        }
    }
  ]
)

Ergebnis:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

Wann immer Sie also $dateToParts verwenden in Ihrer Pipeline haben Sie Zugriff auf die millisecond Feld (und die anderen Datumsteile) im nächsten Schritt.

Siehe MongoDB $dateToParts für weitere Informationen und Beispiele.

Der forEach() Methode

Sie können cursor.forEach() verwenden um den Cursor mit einer JavaScript-Methode wie getMilliseconds() zu durchlaufen oder getUTCMilliseconds() um nur die Millisekunden zurückzugeben.

db.cats.find().forEach(
  function(c) {
    print(
      c.born.getUTCMilliseconds()
      );
  }
);

Ergebnis:

123
112
7

Der getUTCSeconds() Die JavaScript-Methode gibt eine Ganzzahl zwischen 0 und 999 zurück, die den Millisekundenteil des angegebenen Datumsobjekts darstellt.

Die getMilliseconds() -Methode gibt es in Ortszeit zurück.

Möglicherweise stellen Sie auch fest, dass die vorherigen Optionen ein ganzes Dokument zurückgeben, das ein Name/Wert-Paar enthält, während diese Option nur den tatsächlichen Millisekundenwert und nicht das ganze Dokument zurückgibt.

Die map() Methode

Die cursor.map() Methode wendet eine Funktion auf jedes vom Cursor besuchte Dokument an und kombiniert die Werte in einem Array.

Beispiel:

db.cats.find().map(
  function(c) {
    c = c.born.getUTCMilliseconds();
    return c;
  }
);

Ergebnis:

[ 123, 112, 7 ]