Definición
$dateToPartsDevuelve un documento que contiene las partes constituyentes de un valor BSON de fecha dado como propiedades individuales. Las propiedades devueltas son
year,month,day,hour,minute,secondymillisecond.Puedes establecer la
iso8601propiedad entruepara que devuelva las partes que representan una fecha de semana ISO. Esto devolverá un documento cuyas propiedadesisoWeekYearisoWeekisoDayOfWeekson,,,,,hourminutesecondmillisecondy.La expresión tiene la siguiente
$dateToPartssintaxis:{ $dateToParts: { 'date' : <dateExpression>, 'timezone' : <timezone>, 'iso8601' : <boolean> } } El toma un documento con los siguientes
$dateToPartscampos:CampoObligatorio/OpcionalDescripcióndateRequerido
La fecha de ingreso para la que se deben devolver partes.
<dateExpression>puede ser cualquier expresión que se resuelva en una fecha, un timestamp o un ObjectID. Para obtener más información sobre expresiones, consulta Expresiones.timezoneOpcional
La zona horaria que se utilizará para formatear la fecha. Por defecto, utiliza
$dateToPartsUTC.<timezone>puede ser cualquier expresión que se evalúe a una string cuyo valor sea uno de los siguientes:un identificador de zona horaria de Olson, como
"Europe/London""America/New_York"o, oun desplazamiento UTC en la forma:
+/-[hh]:[mm]por ejemplo,"+04:45", o+/-[hh][mm]por ejemplo,"-0530", o+/-[hh], e.g."+03".
Para obtener más información sobre las expresiones, consulta Expresiones.
iso8601Opcional
Si se configura en
true, modifica el documento de salida para usar campos de fecha en semanas ISO. Por defecto esfalse.
Comportamiento
Al utilizar un identificador de zona horaria de Olson en el campo <timezone>, MongoDB aplica el horario de verano (DST) si corresponde para la zona horaria especificada.
Por ejemplo, considera una colección sales con el siguiente documento:
db.sales.insertOne( { "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:15:39.736Z") } )
La siguiente agregación ilustra cómo MongoDB gestiona el ajuste de DST para el identificador de zona horaria Olson. El ejemplo usa los operadores $hour y $minute para devolver las partes correspondientes del campo date:
db.sales.aggregate([ { $project: { "nycHour": { $hour: { date: "$date", timezone: "-05:00" } }, "nycMinute": { $minute: { date: "$date", timezone: "-05:00" } }, "gmtHour": { $hour: { date: "$date", timezone: "GMT" } }, "gmtMinute": { $minute: { date: "$date", timezone: "GMT" } }, "nycOlsonHour": { $hour: { date: "$date", timezone: "America/New_York" } }, "nycOlsonMinute": { $minute: { date: "$date", timezone: "America/New_York" } } } }])
La operación devuelve el siguiente resultado:
{ "_id": 1, "nycHour" : 5, "nycMinute" : 24, "gmtHour" : 10, "gmtMinute" : 24, "nycOlsonHour" : 6, "nycOlsonMinute" : 24 }
Ejemplo
Considere una colección sales con el siguiente documento:
{ "_id" : 2, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2017-01-01T01:29:09.123Z") }
La siguiente agregación utiliza para devolver un documento que contiene las partes constituyentes $dateToParts del date campo.
db.sales.aggregate([ { $project: { date: { $dateToParts: { date: "$date" } }, date_iso: { $dateToParts: { date: "$date", iso8601: true } }, date_timezone: { $dateToParts: { date: "$date", timezone: "America/New_York" } } } }])
La operación devuelve el siguiente resultado:
{ "_id" : 2, "date" : { "year" : 2017, "month" : 1, "day" : 1, "hour" : 1, "minute" : 29, "second" : 9, "millisecond" : 123 }, "date_iso" : { "isoWeekYear" : 2016, "isoWeek" : 52, "isoDayOfWeek" : 7, "hour" : 1, "minute" : 29, "second" : 9, "millisecond" : 123 }, "date_timezone" : { "year" : 2016, "month" : 12, "day" : 31, "hour" : 20, "minute" : 29, "second" : 9, "millisecond" : 123 } }