Pokud máte dokumenty, které ukládají data jako objekty Date, ale chcete je vrátit v jiném formátu, můžete použít $dateToString
provozovatel agregátního potrubí.
Můžete například chtít, aby bylo vráceno datum v mm/dd/yyyy
formát namísto dlouhého ISODate()
formát, který zahrnuje minuty, sekundy, milisekundy atd
$dateToString
operátor převede objekt Date na řetězec a volitelně vám umožní určit formát pro výsledný výstup.
Příklad
Předpokládejme, že máme sbírku nazvanou cats
s následujícími dokumenty:
{ "_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") }
Můžeme použít $dateToString
vrátit tento dokument s daty v jiném formátu.
Odeberme například sekundy a milisekundy z data:
db.cats.aggregate(
[
{
$project: {
name: 1,
formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
}
}
]
)
Výsledek:
{ "_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" }
Datum se nám podařilo naformátovat pomocí format
parametr. Toto je volitelný parametr, který vám umožňuje použít nula nebo více specifikátorů formátu k určení, jak má být datum formátováno.
Viz MongoDB $dateToString
Specifikátory formátu pro úplný seznam specifikátorů formátu, které lze použít s $dateToString
operátor.
Datum v dd/mm/yyyy
Formát
Zde je další příklad, který převádí data na dd/mm/yyyy
formát:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
}
}
]
)
Výsledek:
{ "formattedDate" : "03/01/2021" } { "formattedDate" : "08/12/2019" } { "formattedDate" : "24/09/2020" }
Datum v mm/dd/yyyy
Formát
Nebo jej vložte do mm/dd/yyyy
formát, můžeme jednoduše přepnout první dva specifikátory formátu kolem:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
}
}
]
)
Výsledek:
{ "formattedDate" : "01/03/2021" } { "formattedDate" : "12/08/2019" } { "formattedDate" : "09/24/2020" }
Vraťte část jednoho data
Můžete zahrnout tolik nebo jen málo specifikátorů formátu, kolik chcete. Můžete například použít pouze jeden specifikátor formátu pro výstup pouze části data s rokem.
Příklad:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Výsledek:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
Mějte však na paměti, že existují i jiné způsoby, jak extrahovat pouze jednu část data z objektu Date. Můžete například použít $year
operátor k extrakci roku.
Zde jsou různé operátory pro extrakci každé konkrétní části data:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Můžete také použít $dateToParts
operátor vrátí dokument, který obsahuje všechny různé části data oddělené do vlastního pole.