Wenn Sie Dokumente haben, die Datumsangaben als Date-Objekte speichern, diese aber in einem anderen Format zurückgeben möchten, können Sie den $dateToString
verwenden aggregierter Pipeline-Betreiber.
Beispielsweise möchten Sie möglicherweise, dass ein Datum im Format mm/dd/yyyy
zurückgegeben wird statt des langen ISODate()
Format, das Minuten, Sekunden, Millisekunden usw. enthält
Der $dateToString
-Operator wandelt das Date-Objekt in einen String um und ermöglicht optional die Angabe eines Formats für die resultierende Ausgabe.
Beispiel
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") }
Wir können $dateToString
verwenden um dieses Dokument mit den Daten in einem anderen Format zurückzugeben.
Lassen Sie uns beispielsweise die Sekunden und Millisekunden aus dem Datum entfernen:
db.cats.aggregate(
[
{
$project: {
name: 1,
formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
}
}
]
)
Ergebnis:
{ "_id" : 1, "name" : "Scratch", "formattedDate" : "2021-01-03 23:30" } { "_id" : 2, "name" : "Meow", "formattedDate" : "2019-12-08 04:00" } { "_id" : 3, "name" : "Fluffy", "formattedDate" : "2020-09-24 10:45" }
Wir konnten das Datum mit dem format
formatieren Parameter. Dies ist ein optionaler Parameter, mit dem Sie null oder mehr Formatbezeichner verwenden können, um anzugeben, wie das Datum formatiert werden soll.
Siehe MongoDB $dateToString
Formatbezeichner für eine vollständige Liste von Formatbezeichnern, die mit $dateToString
verwendet werden können Betreiber.
Datum in dd/mm/yyyy
Formatieren
Hier ist ein weiteres Beispiel, das die Daten in dd/mm/yyyy
umwandelt Format:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
}
}
]
)
Ergebnis:
{ "formattedDate" : "03/01/2021" } { "formattedDate" : "08/12/2019" } { "formattedDate" : "24/09/2020" }
Datum in mm/dd/yyyy
Formatieren
Oder um es in mm/dd/yyyy
zu setzen format können wir einfach die ersten beiden Formatbezeichner umtauschen:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
}
}
]
)
Ergebnis:
{ "formattedDate" : "01/03/2021" } { "formattedDate" : "12/08/2019" } { "formattedDate" : "09/24/2020" }
Einen einzelnen Datumsteil zurückgeben
Sie können beliebig viele oder wenige Formatbezeichner einfügen. Beispielsweise könnten Sie nur einen Formatbezeichner verwenden, um nur den Jahresteil des Datums auszugeben.
Beispiel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Ergebnis:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
Beachten Sie jedoch, dass es andere Möglichkeiten gibt, nur einen einzelnen Datumsteil aus einem Date-Objekt zu extrahieren. Sie können beispielsweise $year
verwenden Operator zum Extrahieren des Jahres.
Hier sind die verschiedenen Operatoren zum Extrahieren jedes spezifischen Datumsteils:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Sie können auch $dateToParts
verwenden -Operator, um ein Dokument zurückzugeben, das alle verschiedenen Datumsteile getrennt in eigenen Feldern enthält.