Zeitstempel in MongoDB in Datum umwandeln

Mehvish Ashiq 12 Juli 2022
  1. Zeitstempel in Datum in MongoDB umwandeln
  2. Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ Zahl ist
  3. Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ String ist
  4. Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ Objekt ist
Zeitstempel in MongoDB in Datum umwandeln

Dieses Tutorial zeigt, wie wir den Zeitstempel in MongoDB in ein Datum umwandeln können. Es veranschaulicht auch, wie die Einträge für ein bestimmtes Datum gezählt werden.

Zeitstempel in Datum in MongoDB umwandeln

Die Umwandlung von timestamp in date hängt davon ab, welchen Typ wir den Zeitstempel gespeichert haben. Ist es vom Typ Objekt, Zahl oder String?

Wir können den Feldtyp mit dem folgenden Befehl in der Mongo-Shell überprüfen. In diesem Lernprogramm erfahren Sie, wie Sie den Zeitstempel in das Datum konvertieren, wenn er vom Typ Zahl, Zeichenfolge oder Objekt ist.

Art des Feldes prüfen:

// MongoDB 5.0.8

> typeof db.collection_name.findOne().fieldName;

Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ Zahl ist

Beispielcode (für collection1):

// MongoDB 5.0.8

> db.collection1.insertMany([
    {"_id": 1, "datetime": new Date().getTime()}, //saves timestamp in milliseconds
    {"_id": 2, "datetime": new Date().getTime()},
    {"_id": 3, "datetime": new Date().getTime()},
    {"_id": 4, "datetime": new Date().getTime()},
    {"_id": 5, "datetime": new Date().getTime()}
]);

> db.collection1.find();

AUSGANG:

{ "_id" : 1, "datetime" : 1655448286502 }
{ "_id" : 2, "datetime" : 1655448286502 }
{ "_id" : 3, "datetime" : 1655448286502 }
{ "_id" : 4, "datetime" : 1655448286502 }
{ "_id" : 5, "datetime" : 1655448286502 }

Check Type des datetime-Feldes:

// MongoDB 5.0.8

> typeof db.collection1.findOne().datetime;

AUSGANG:

number

Sobald die Sammlung fertig ist und wir den Feldtyp kennen, können wir den folgenden Ansatz verwenden, um vom Zeitstempel zum Datum zu konvertieren und die Einträge pro Datum zu zählen.

Beispielcode (für Sammlung1):

// MongoDB 5.0.8

> db.collection1.aggregate([
      {
          "$project": {
              "_id": { "$toDate": "$datetime" }
           }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" }},
              "count": { "$sum": 1 }
          }
      }
]);

AUSGANG:

{ "_id" : "2022-06-17", "count" : 5 }

Hier verwenden wir die Aggregationsstufe $project, die die Dokumente aus der angegebenen Sammlung nimmt und die Einbeziehung der Felder, die Unterdrückung des _id-Felds, das Hinzufügen neuer Felder und das Zurücksetzen der Werte der vorhandenen Felder mitteilt.

Innerhalb der Stufe $project konvertieren wir den Wert des Felds datetime mithilfe der Aggregation $toDate in Datum und speichern ihn im Feld _id, das weiter an die Aggregationsstufe $group übergeben wird.

In dieser Phase verwenden wir den Aggregations-Pipeline-Operator $dateToString, um das angegebene date-Objekt gemäß dem angegebenen Format in einen String zu konvertieren und im Feld _id zu speichern, das weiter zur Gruppierung der Dokumente verwendet wird.

$dateToString nimmt entweder timestamp, date oder ObjectId, die unter Berücksichtigung des benutzerdefinierten Formats weiter transformiert werden, während $sum nur die kollektive Summe der numerischen Werte zurückgibt.

Schließlich gruppieren wir die Dokumente nach dem Element, das hier _id ist. Denken Sie daran, dass die _id jetzt einen Zeichenfolgenwert enthält, da wir das angegebene Datum in eine Zeichenfolge pro benutzerdefiniertem Format konvertiert haben.

Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ String ist

Beispielcode (für collection2):

// MongoDB 5.0.8

> db.collection2.insertMany([
    {"_id": 1, "datetime": "1655445247168"},
    {"_id": 2, "datetime": "1522838153324"},
    {"_id": 3, "datetime": "1513421466415"},
    {"_id": 4, "datetime": "1515488183153"},
    {"_id": 5, "datetime": "1521571234500"}
]);

> db.collection2.find();

AUSGANG:

{ "_id" : 1, "datetime" : "1655445247168" }
{ "_id" : 2, "datetime" : "1522838153324" }
{ "_id" : 3, "datetime" : "1513421466415" }
{ "_id" : 4, "datetime" : "1515488183153" }
{ "_id" : 5, "datetime" : "1521571234500" }

Check Type des datetime-Feldes:

// MongoDB 5.0.8

> typeof db.collection2.findOne().datetime;

AUSGANG:

string

In dieser Sammlung haben wir den Zeitstempel im Zeichenfolgenformat. Wir können also die folgende Lösung verwenden, um sie von Zeitstempel zu Datum zu konvertieren und sie nach Datum zu gruppieren.

Beispielcode (für collection2):

// MongoDB 5.0.8

> db.collection2.aggregate([
      {
          "$project": {
              "_id": { "$toDate": { "$toLong": "$datetime" }}
          }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
              "count": { "$sum": 1 }
          }
      }
]);

AUSGANG:

{ "_id" : "2018-03-20", "count" : 1 }
{ "_id" : "2017-12-16", "count" : 1 }
{ "_id" : "2022-06-17", "count" : 1 }
{ "_id" : "2018-04-04", "count" : 1 }
{ "_id" : "2018-01-09", "count" : 1 }

Dieser Code ist mit Ausnahme eines Unterschieds derselbe wie im vorherigen Beispiel. Hier verwenden wir $toLong, um das Feld datetime zuerst vom String- in den Zahlentyp zu konvertieren, und verwenden dann diesen konvertierten Wert, um es mit $toDate in das Datum umzuwandeln.

Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ Objekt ist

Beispielcode (für collection3):

// MongoDB 5.0.8

> db.collection3.insertMany([
    {"_id":1, "datetime": new Timestamp()},
    {"_id":2, "datetime": new Timestamp()},
    {"_id":3, "datetime": new Timestamp()},
    {"_id":4, "datetime": new Timestamp()},
    {"_id":5, "datetime": new Timestamp()}
]);

> db.collection3.find();

AUSGANG:

{ "_id" : 1, "datetime" : Timestamp(1655448393, 1) }
{ "_id" : 2, "datetime" : Timestamp(1655448393, 2) }
{ "_id" : 3, "datetime" : Timestamp(1655448393, 3) }
{ "_id" : 4, "datetime" : Timestamp(1655448393, 4) }
{ "_id" : 5, "datetime" : Timestamp(1655448393, 5) }

Check Type des datetime-Feldes:

// MongoDB 5.0.8

> typeof db.collection3.findOne().datetime;

AUSGANG:

object

Diesmal können wir die folgende Lösung verwenden, um Zeitstempel in Datum umzuwandeln und die Einträge pro Datum zu zählen.

Beispielcode (für collection3):

// MongoDB 5.0.8

> db.collection3.aggregate([
      {
          "$project": { "_id": "$datetime" }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
              "count": { "$sum": 1 }
          }
      }
]);

AUSGANG:

{ "_id" : "2022-06-17", "count" : 5 }
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MongoDB Date