Hvis du har dokumenter, der gemmer datoer som Dato-objekter, men du vil returnere dem i et andet format, kan du bruge $dateToString
aggregeret rørledningsoperatør.
For eksempel vil du måske have en dato returneret i mm/dd/yyyy
format i stedet for den lange ISODate()
format, der inkluderer minutter, sekunder, millisekunder osv.
$dateToString
operatoren konverterer Dato-objektet til en streng og giver dig mulighed for at angive et format for det resulterende output.
Eksempel
Antag, at vi har en samling kaldet cats
med følgende dokumenter:
{ "_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") }
Vi kan bruge $dateToString
for at returnere det pågældende dokument med datoerne i et andet format.
Lad os f.eks. fjerne sekunderne og millisekunderne fra datoen:
db.cats.aggregate(
[
{
$project: {
name: 1,
formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
}
}
]
)
Resultat:
{ "_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" }
Vi var i stand til at formatere datoen ved at bruge format
parameter. Dette er en valgfri parameter, der giver dig mulighed for at bruge nul eller flere formatangivelser til at angive, hvordan datoen skal formateres.
Se MongoDB $dateToString
Formatspecifikationer for en komplet liste over formatspecifikationer, der kan bruges med $dateToString
operatør.
Dato i dd/mm/yyyy
Formater
Her er et andet eksempel, der konverterer datoerne til dd/mm/yyyy
format:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
}
}
]
)
Resultat:
{ "formattedDate" : "03/01/2021" } { "formattedDate" : "08/12/2019" } { "formattedDate" : "24/09/2020" }
Dato i mm/dd/yyyy
Formater
Eller for at sætte det i mm/dd/yyyy
format, kan vi simpelthen skifte mellem de to første formatspecifikationer:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
}
}
]
)
Resultat:
{ "formattedDate" : "01/03/2021" } { "formattedDate" : "12/08/2019" } { "formattedDate" : "09/24/2020" }
Returnering af en enkelt datodel
Du kan inkludere så mange eller så få formatspecifikationer, som du ønsker. For eksempel kan du kun bruge én formatspecifikation til kun at udskrive årsdelen af datoen.
Eksempel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Resultat:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
Husk dog, at der er andre måder at udtrække kun en enkelt datodel fra et Date-objekt. For eksempel kan du bruge $year
operatør for at udtrække året.
Her er de forskellige operatører til at udtrække hver specifik datodel:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Du kan også bruge $dateToParts
operatør for at returnere et dokument, der indeholder alle de forskellige datodele adskilt i deres eget felt.