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.