Ако имате документи, които съхраняват дати като обекти Date, но искате да ги върнете в различен формат, можете да използвате $dateToString
оператор на агрегатен тръбопровод.
Например, може да искате дата да бъде върната в mm/dd/yyyy
формат вместо дългия ISODate()
формат, който включва минути, секунди, милисекунди и т.н.
$dateToString
операторът преобразува обекта Date в низ и по избор ви позволява да зададете формат за получения резултат.
Пример
Да предположим, че имаме колекция, наречена cats
със следните документи:
{ "_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") }
Можем да използваме $dateToString
за да върнете този документ с датите в различен формат.
Например, нека премахнем секундите и милисекундите от датата:
db.cats.aggregate(
[
{
$project: {
name: 1,
formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
}
}
]
)
Резултат:
{ "_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" }
Успяхме да форматираме датата с помощта на format
параметър. Това е незадължителен параметър, който ви позволява да използвате нула или повече спецификатори на формат, за да посочите как трябва да бъде форматирана датата.
Вижте MongoDB $dateToString
Форматни спецификатори за пълен списък от спецификатори на формат, които могат да се използват с $dateToString
оператор.
Дата в dd/mm/yyyy
Формат
Ето още един пример, който преобразува датите в dd/mm/yyyy
формат:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
}
}
]
)
Резултат:
{ "formattedDate" : "03/01/2021" } { "formattedDate" : "08/12/2019" } { "formattedDate" : "24/09/2020" }
Дата в mm/dd/yyyy
Формат
Или да го поставите в mm/dd/yyyy
формат, можем просто да превключим първите два спецификатора на формат:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
}
}
]
)
Резултат:
{ "formattedDate" : "01/03/2021" } { "formattedDate" : "12/08/2019" } { "formattedDate" : "09/24/2020" }
Върнете част от една дата
Можете да включите толкова или толкова малко спецификатори на формат, колкото желаете. Например, можете да използвате само един спецификатор на формат, за да изведете само частта от годината на датата.
Пример:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Резултат:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
Въпреки това, имайте предвид, че има и други начини за извличане само на една част от датата от обект Date. Например, можете да използвате $year
оператор за извличане на годината.
Ето различните оператори за извличане на всяка конкретна част от дата:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Можете също да използвате $dateToParts
оператор, за да върне документ, който съдържа всички различни части за дата, разделени в собствено поле.