MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como formatar a data no MongoDB


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.