MongoDB stellt eine Reihe von Aggregations-Pipeline-Operatoren für die Arbeit mit Datumsangaben bereit, einschließlich Operatoren, die bestimmte Teile von Datumsangaben wie Jahr, Monat, Tag usw. extrahieren.
Es gibt auch einige MongoDB-Methoden, mit denen Sie einen Cursor durchlaufen und eine JavaScript-Funktion anwenden können. Sie können daher mit JavaScript Datumswerte und Datumsteile usw. nach Bedarf aus einem Feld extrahieren.
Dieser Artikel stellt 5 Möglichkeiten vor, den Monatsteil eines Datums 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:12Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }
Die folgenden Beispiele demonstrieren verschiedene Optionen zum Zurückgeben des Monatsteils von born
Bereich dieser Dokumente.
Der $month
Betreiber
Der $month
Der Operator wurde speziell entwickelt, um ein Dokument mit dem Monatsteil eines bestimmten Datums zurückzugeben.
Wir können den folgenden Code ausführen, um den Monat von born
zurückzugeben Feld im obigen Dokument.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMonth: { $month: "$born" }
}
}
]
)
Ergebnis:
{ "birthMonth" : 1 } { "birthMonth" : 12 } { "birthMonth" : 9 }
Sie können auch die Zeitzone angeben, wenn Sie $month
verwenden Operator.
Siehe MongoDB $month
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 Monatsanteil zurückgegeben wird.
Es gibt Formatbezeichner für jeden Datumsteil. Der %m
Formatbezeichner gibt den Monat zurück.
Beispiel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMonth: { $dateToString: { format: "%m", date: "$born" } }
}
}
]
)
Ergebnis:
{ "birthMonth" : "01" } { "birthMonth" : "12" } { "birthMonth" : "09" }
Wir hätten mehr Formatbezeichner bereitstellen können, um Datumsteile in das Ergebnis aufzunehmen, aber da wir in diesem Artikel nur daran interessiert sind, den Monat zu extrahieren, haben wir nur einen Formatbezeichner verwendet.
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 den month
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" : 12, "millisecond" : 0 } } { "dateParts" : { "year" : 2020, "month" : 9, "day" : 24, "hour" : 10, "minute" : 30, "second" : 0, "millisecond" : 0 } }
Dieses Ergebnis kann dann an die nächste Stufe in der Pipeline weitergegeben werden, um nur den month
zu extrahieren Feld.
Folgendes passiert, wenn wir nur für den month
eine weitere Projektion hinzufügen Feld:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMonth: "$dateParts.month"
}
}
]
)
Ergebnis:
{ "birthMonth" : 1 } { "birthMonth" : 12 } { "birthMonth" : 9 }
Dies ist offensichtlich nicht so prägnant wie die Verwendung der vorherigen Optionen. Je nachdem, was Sie in Ihrer Pipeline tun, könnte dieser Ansatz jedoch das Richtige sein.
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 getMonth()
zu durchlaufen oder getUTCMonth()
um nur den Monatswert zurückzugeben.
db.cats.find().forEach(
function(c) {
print(
c.born.getMonth()
);
}
);
Ergebnis:
0 11 8
Beachten Sie, dass getMonth()
Die JavaScript-Methode gibt die Monatszahl als Ganzzahl zwischen 0 und 11 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 Monatswert 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.getMonth();
return c;
}
);
Ergebnis:
[ 0, 11, 8 ]
Auch hier erhalten wir die Monate als ganze Zahlen zwischen 0 und 11.