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.