Jeśli masz dokumenty, które przechowują daty jako obiekty Date, ale chcesz zwrócić je w innym formacie, możesz użyć $dateToString
operator rurociągu kruszywa.
Na przykład możesz chcieć, aby data została zwrócona w formacie mm/dd/yyyy
format zamiast długiej ISODate()
format zawierający minuty, sekundy, milisekundy itp.
$dateToString
operator konwertuje obiekt Date na łańcuch i opcjonalnie pozwala określić format wynikowego wyniku.
Przykład
Załóżmy, że mamy kolekcję o nazwie cats
z następującymi dokumentami:
{ "_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") }
Możemy użyć $dateToString
aby zwrócić ten dokument z datami w innym formacie.
Na przykład usuńmy sekundy i milisekundy z daty:
db.cats.aggregate(
[
{
$project: {
name: 1,
formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
}
}
]
)
Wynik:
{ "_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" }
Udało nam się sformatować datę za pomocą format
parametr. Jest to parametr opcjonalny, który pozwala na użycie zerowej lub większej liczby specyfikatorów formatu do wskazania, jak data powinna być sformatowana.
Zobacz MongoDB $dateToString
Specyfikatory formatu dla pełnej listy specyfikatorów formatu, których można używać z $dateToString
operatora.
Data w dd/mm/yyyy
Formatuj
Oto kolejny przykład, który konwertuje daty na dd/mm/yyyy
format:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
}
}
]
)
Wynik:
{ "formattedDate" : "03/01/2021" } { "formattedDate" : "08/12/2019" } { "formattedDate" : "24/09/2020" }
Data w mm/dd/yyyy
Formatuj
Lub umieść go w mm/dd/yyyy
format, możemy po prostu zamienić pierwsze dwa specyfikatory formatu wokół:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
}
}
]
)
Wynik:
{ "formattedDate" : "01/03/2021" } { "formattedDate" : "12/08/2019" } { "formattedDate" : "09/24/2020" }
Zwróć część z jedną datą
Możesz podać tyle lub kilka specyfikatorów formatu, ile chcesz. Na przykład możesz użyć tylko jednego specyfikatora formatu, aby wyprowadzić tylko część roku daty.
Przykład:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Wynik:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
Pamiętaj jednak, że istnieją inne sposoby wyodrębnienia tylko jednej części daty z obiektu Date. Na przykład możesz użyć $year
operatora do wyodrębnienia roku.
Oto różne operatory do wyodrębniania poszczególnych części daty:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Możesz także użyć $dateToParts
operatora, aby zwrócić dokument, który zawiera wszystkie różne części daty oddzielone do ich własnego pola.