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.