Se você possui documentos que armazenam datas como objetos Date, mas deseja devolvê-los em um formato diferente, você pode usar o
$dateToString
operador de gasoduto agregado. Por exemplo, você pode querer que uma data seja retornada em
mm/dd/yyyy
formato em vez do longo ISODate()
formato que inclui minutos, segundos, milissegundos, etc. O
$dateToString
O operador converte o objeto Date em uma string e, opcionalmente, permite especificar um formato para a saída resultante. Exemplo
Suponha que tenhamos uma coleção chamada
cats
com os seguintes documentos:{ "_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") }
Podemos usar
$dateToString
para devolver esse documento com as datas em um formato diferente. Por exemplo, vamos remover os segundos e milissegundos da data:
db.cats.aggregate(
[
{
$project: {
name: 1,
formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
}
}
]
)
Resultado:
{ "_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" }
Conseguimos formatar a data usando o
format
parâmetro. Este é um parâmetro opcional que permite usar zero ou mais especificadores de formato para indicar como a data deve ser formatada. Veja MongoDB
$dateToString
Especificadores de formato para uma lista completa de especificadores de formato que podem ser usados com o $dateToString
operador. Data em dd/mm/yyyy
Formato
Aqui está outro exemplo que converte as datas para
dd/mm/yyyy
formato:db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
}
}
]
)
Resultado:
{ "formattedDate" : "03/01/2021" } { "formattedDate" : "08/12/2019" } { "formattedDate" : "24/09/2020" }
Data em dd/mm/yyyy
Formato
Ou para colocá-lo em
mm/dd/yyyy
format, podemos simplesmente alternar os dois primeiros especificadores de formato:db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
}
}
]
)
Resultado:
{ "formattedDate" : "01/03/2021" } { "formattedDate" : "12/08/2019" } { "formattedDate" : "09/24/2020" }
Devolver uma peça de data única
Você pode incluir quantos especificadores de formato desejar. Por exemplo, você pode usar apenas um especificador de formato para gerar apenas a parte do ano da data.
Exemplo:
db.cats.aggregate(
[
{
$project: {
_id: 0,
formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
Resultado:
{ "formattedDate" : "2021" } { "formattedDate" : "2019" } { "formattedDate" : "2020" }
No entanto, lembre-se de que existem outras maneiras de extrair apenas uma única parte de data de um objeto Date. Por exemplo, você pode usar o
$year
operador para extrair o ano. Aqui estão os vários operadores para extrair cada parte de data específica:
$dayOfWeek
$dayOfMonth
$dayOfYear
$hour
$isoWeek
$isoWeekYear
$isoDayOfWeek
$millisecond
$minute
$month
$second
$week
$year
Você também pode usar o
$dateToParts
operador para retornar um documento que contém todas as várias partes de data separadas em seu próprio campo.