sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo formatear la fecha en MongoDB

Si tiene documentos que almacenan fechas como objetos de fecha, pero desea devolverlos en un formato diferente, puede usar el $dateToString operador de tubería agregada.

Por ejemplo, es posible que desee que se devuelva una fecha en mm/dd/yyyy formato en lugar del largo ISODate() formato que incluye minutos, segundos, milisegundos, etc

El $dateToString El operador convierte el objeto Fecha en una cadena y, opcionalmente, le permite especificar un formato para la salida resultante.

Ejemplo

Supongamos que tenemos una colección llamada cats con los siguientes 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 ese documento con las fechas en un formato diferente.

Por ejemplo, eliminemos los segundos y milisegundos de la fecha:

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" }

Pudimos formatear la fecha usando el format parámetro. Este es un parámetro opcional que le permite usar cero o más especificadores de formato para indicar cómo debe formatearse la fecha.

Ver MongoDB $dateToString Especificadores de formato para obtener una lista completa de los especificadores de formato que se pueden usar con $dateToString operador.

Fecha en dd/mm/yyyy Formato

Aquí hay otro ejemplo que convierte las fechas a 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" }

Fecha en mm/dd/yyyy Formato

O ponerlo en mm/dd/yyyy formato, simplemente podemos cambiar los dos primeros 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 una parte de fecha única

Puede incluir tantos o tan pocos especificadores de formato como desee. Por ejemplo, podría usar solo un especificador de formato para generar solo la parte del año de la fecha.

Ejemplo:

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%Y", date: "$born" } }
       }
     }
   ]
)

Resultado:

{ "formattedDate" : "2021" }
{ "formattedDate" : "2019" }
{ "formattedDate" : "2020" }

Sin embargo, tenga en cuenta que hay otras formas de extraer solo una parte de fecha de un objeto Fecha. Por ejemplo, puede usar el $year operador para extraer el año.

Estos son los diversos operadores para extraer cada parte de fecha específica:

  • $dayOfWeek
  • $dayOfMonth
  • $dayOfYear
  • $hour
  • $isoWeek
  • $isoWeekYear
  • $isoDayOfWeek
  • $millisecond
  • $minute
  • $month
  • $second
  • $week
  • $year

También puede usar el $dateToParts operador para devolver un documento que contiene todas las distintas partes de la fecha separadas en su propio campo.