Speichern Sie Datum und Uhrzeit in MongoDB
-
Verwenden Sie die
Date()
-Methode, um Datum und Uhrzeit in MongoDB zu speichern -
Verwenden Sie
ISODate()
, um Datum und Uhrzeit in MongoDB zu speichern - Abschluss
In diesem Artikel wird erläutert, wie Datum und Uhrzeit am besten gespeichert werden. Hier wird die Methode Date()
im Detail erklärt.
Darüber hinaus werden verschiedene Ansätze zur Verwendung von Datumsabfragen beschrieben. Das Datumsabfrageproblem mit ISODate, das in MongoDB nicht funktioniert, wird auch mit einer Erläuterung der Codesegmente besprochen.
Verwenden Sie die Date()
-Methode, um Datum und Uhrzeit in MongoDB zu speichern
Date()
gibt das aktuelle Datum als String oder als Date
-Objekt aus.
new Date()
gibt ein Date
-Objekt mit dem aktuellen Datum zurück. Der ISODate-Helfer wird von Mongosh um dieses Objekt gewickelt; das ISODate ist in UTC (Universal Time).
Sie können die new Date()
-Funktion Object() { [native code] }
oder die ISODate()
-Methode verwenden, um ein bestimmtes Datum zu definieren, indem Sie einen ISO-8601-Datumsstring mit einem Jahr zwischen 0 und 9999 angeben Diese Funktionen akzeptieren die folgenden Formate:
- Das ISODate mit dem gelieferten Datum wird durch
new Date("")
zurückgegeben. new Date("")
gibt eine DateTime in der lokalen Zeitzone des Clients an und gibt ISODate mit dieser DateTime in UTC zurück.new Date(<integer>)
gibt eine ISODate-Instanz mit der in Millisekunden angegebenen DateTime seit der UNIX-Epoche (1. Januar 1970) zurück.
Verhalten der Date()
-Methode in MongoDB
Date
-Objekte werden intern als vorzeichenbehaftete 64-Bit-Ganzzahl gehalten, die die Millisekunden seit der Unix-Epoche darstellt.
Alle Datenbankprozeduren und Treiber unterstützen nicht den kompletten 64-Bit-Bereich. Datumsangaben mit Jahreszahlen im Bereich von 0 bis 9999 sind sicher zu handhaben.
Beispiele für die Methode Date()
Verwenden Sie Date()
in einer Abfrage
Der folgende Code fügt ein Dokument hinzu, bei dem das Feld dateAdded
auf das aktuelle Datum gesetzt ist, wenn kein Dokument mit der _id
gleich 1 in der Sammlung products
existiert:
db.products.updateOne(
{ _id: 1 },
{
$set: { item: "apple" },
$setOnInsert: { dateAdded: new Date() }
},
{ upsert: true }
)
Rückgabedatum als String
Verwenden Sie die Methode Date()
, um das Datum als Zeichenfolge zurückzugeben, wie im folgenden Beispiel zu sehen:
var myDateString = Date();
Rückgabedatum als Date
-Objekt
Der Mongosh umschließt Objekte vom Datumstyp mit dem ISODate-Helfer; die Objekte bleiben jedoch vom Datumstyp.
Das folgende Beispiel verwendet new Date()
, um das Date
-Objekt mit der angegebenen UTC DateTime zurückzugeben.
var myDate = new Date("2016-05-18T16:00:00Z");
MongoDB Sortieren nach Datum
Sie können dieses Problem mit der Funktion sort()
und dem Aggregat $sort
in MongoDB lösen. Mit diesem Tool können Sie die Daten in aufsteigender oder absteigender Reihenfolge sortieren.
Beispiel:
db.posts.find().pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "Hi there",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "Hello",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "World",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
Einige Daten werden der Beitragssammlung hinzugefügt, und das Datumsfeld ordnet sie in aufsteigender Reihenfolge an, wobei frühere Daten zuerst angezeigt werden.
db.posts.find().sort({ date: 1 }).pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "Hi there",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "Hello",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "World",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
Da das erste Dokument einen Datumsstring anstelle eines date
-Objekts hat, erscheint der Datumsstring zuerst, auch wenn das Datum in Dokument 2 später liegt.
MongoDB Sortieren nach Datum funktioniert nicht
Es kann mehrere Gründe geben, warum MongoDB nicht funktioniert, aber Sie müssen sich an einige Verfahren erinnern, um in MongoDB nach Datum zu sortieren.
- Denken Sie immer daran, dass Sie die Daten in einer Sammlung speichern.
- Es gibt zwei Möglichkeiten, das Feld
Datum
im Dokument zu speichern –Date()
undISODate()
. - Wenn Sie das Feld
date
mit der Methodesort()
sortieren, prüfen Sie, welchen Datentyp Sie verwendet haben.
Beispiel:
db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
"acknowledged" : true,
"insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}
Das Datum wird in diesem Beispiel mit der Zeichenfolge Date()
hinzugefügt, und der Sammlungsname ist das Dokument. Auf die gleiche Weise können Sie mit ISODate()
ein Datum in das Dokument einfügen.
Verwenden Sie ISODate()
, um Datum und Uhrzeit in MongoDB zu speichern
Verwenden Sie den Operator $gte
und ISODate()
, um die Datumsabfrage mit ISODate in MongoDB zu implementieren.
Lassen Sie uns anhand des Dokuments eine Sammlung erstellen, um dies besser zu verstehen. Das Folgende ist die Abfrage zum Erstellen einer Sammlung mit einem Dokument:
> db.dateDemo.insertOne({"StudentName":"John","StudentAge":26,"AdmissionDate":new ISODate("2013-06-07")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a65799064dcd4a68b70ea")
}
Die Funktion find()
kann alle Dokumente einer Sammlung anzeigen.
Anfrage:
db.dateDemo.find().pretty();
Ausgang:
Datumsabfrage mit ISODate()
:
> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();
Ausgang:
Abschluss
Dieser Artikel hat die Methode Date()
kurz erklärt. Anschließend wird auf das Problem der Sortierung von Collections mit der Methode Date()
hingewiesen.
Ein Beispiel erklärt, wie die Datumsabfrage mit ISODate in MongoDB funktioniert. Dies zeigte auch, dass das beste Format zum Speichern von Datum und Uhrzeit in MongoDB die Verwendung des nativen JavaScript-Formats Date()
oder ISODate()
ist, da es intern in ein BSON-natives Date
-Objekt konvertiert wird.