MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So formatieren Sie das Datum in MongoDB

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.