Zeitstempel in MongoDB in Datum umwandeln
- Zeitstempel in Datum in MongoDB umwandeln
- Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ Zahl ist
- Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ String ist
- Zeitstempel in Datum umwandeln, wenn Zeitstempel vom Typ Objekt ist
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 }