MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment formater la date dans MongoDB

Si vous avez des documents qui stockent des dates en tant qu'objets Date, mais que vous souhaitez les renvoyer dans un format différent, vous pouvez utiliser le $dateToString opérateur de pipeline d'agrégats.

Par exemple, vous pouvez souhaiter qu'une date soit renvoyée au format mm/dd/yyyy format au lieu du long ISODate() format incluant minutes, secondes, millisecondes, etc

Le $dateToString convertit l'objet Date en chaîne et vous permet éventuellement de spécifier un format pour la sortie résultante.

Exemple

Supposons que nous ayons une collection appelée cats avec les documents suivants :

{ "_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") }

Nous pouvons utiliser $dateToString pour renvoyer ce document avec les dates dans un format différent.

Par exemple, supprimons les secondes et les millisecondes de la date :

db.cats.aggregate(
   [
     {
       $project: {
          name: 1,
          formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
       }
     }
   ]
)

Résultat :

{ "_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" }

Nous avons pu formater la date en utilisant le format paramètre. Il s'agit d'un paramètre facultatif qui vous permet d'utiliser zéro ou plusieurs spécificateurs de format pour indiquer comment la date doit être formatée.

Voir MongoDB $dateToString Spécificateurs de format pour une liste complète des spécificateurs de format qui peuvent être utilisés avec le $dateToString opérateur.

Date en dd/mm/yyyy Format

Voici un autre exemple qui convertit les dates en dd/mm/yyyy format :

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
       }
     }
   ]
)

Résultat :

{ "formattedDate" : "03/01/2021" }
{ "formattedDate" : "08/12/2019" }
{ "formattedDate" : "24/09/2020" }

Date en dd/mm/yyyy Format

Ou pour le mettre en mm/dd/yyyy format, nous pouvons simplement inverser les deux premiers spécificateurs de format :

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
       }
     }
   ]
)

Résultat :

{ "formattedDate" : "01/03/2021" }
{ "formattedDate" : "12/08/2019" }
{ "formattedDate" : "09/24/2020" }

Renvoyer une seule partie de date

Vous pouvez inclure autant ou aussi peu de spécificateurs de format que vous le souhaitez. Par exemple, vous pouvez utiliser un seul spécificateur de format pour afficher uniquement la partie année de la date.

Exemple :

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
       }
     }
   ]
)

Résultat :

{ "formattedDate" : "2021" }
{ "formattedDate" : "2019" }
{ "formattedDate" : "2020" }

Cependant, gardez à l'esprit qu'il existe d'autres moyens d'extraire une seule partie de date d'un objet Date. Par exemple, vous pouvez utiliser le $year opérateur pour extraire l'année.

Voici les différents opérateurs pour extraire chaque partie de date spécifique :

  • $dayOfWeek
  • $dayOfMonth
  • $dayOfYear
  • $hour
  • $isoWeek
  • $isoWeekYear
  • $isoDayOfWeek
  • $millisecond
  • $minute
  • $month
  • $second
  • $week
  • $year

Vous pouvez également utiliser le $dateToParts opérateur pour renvoyer un document qui contient toutes les différentes parties de date séparées dans leur propre champ.