Om du har dokument som lagrar datum som Date-objekt, men du vill returnera dem i ett annat format, kan du använda $dateToString
samlad rörledningsoperatör.
Till exempel kanske du vill att ett datum ska returneras i mm/dd/yyyy
format istället för den långa ISODate()
format som inkluderar minuter, sekunder, millisekunder osv
$dateToString
operatorn konverterar Date-objektet till en sträng och låter dig eventuellt ange ett format för den resulterande utdata.
Exempel
Anta att vi har en samling som heter cats
med följande dokument:
{ "_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 använda $dateToString
för att returnera dokumentet med datum i ett annat format.
Låt oss till exempel ta bort sekunderna och millisekunderna från datumet:
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 kunde formatera datumet genom att använda format
parameter. Detta är en valfri parameter som låter dig använda noll eller fler formatspecifikationer för att ange hur datumet ska formateras.
Se MongoDB $dateToString
Formatspecifikationer för en fullständig lista över formatspecifikationer som kan användas med $dateToString
operatör.
Datum i dd/mm/yyyy
Formatera
Här är ett annat exempel som konverterar datumen till 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" }
Datum i mm/dd/yyyy
Formatera
Eller för att lägga det i mm/dd/yyyy
format, kan vi helt enkelt byta om de två första formatspecifikationerna:
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" }
Returnera en enstaka datumdel
Du kan inkludera så många eller så få formatspecifikationer som du vill. Du kan till exempel använda bara en formatspecifikation för att bara skriva ut årsdelen av datumet.
Exempel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Resultat:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
Tänk dock på att det finns andra sätt att extrahera en enda datumdel från ett Date-objekt. Du kan till exempel använda $year
operatör att ta ut året.
Här är de olika operatorerna för att extrahera varje specifik datumdel:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Du kan också använda $dateToParts
operatör för att returnera ett dokument som innehåller alla olika datumdelar separerade i sitt eget fält.