Definición
$dateToPartsDevuelve un documento que contiene los componentes de un valor de fecha BSON dado como propiedades individuales. Las propiedades devueltas son
year,month,day,hour,minute,secondymillisecond.Puede establecer la
iso8601propiedad entruepara devolver las partes que representan una fecha de semana ISOEn su lugar, esto devolverá un documento donde las propiedadesisoWeekYearisoWeekisoDayOfWeekson,,,,,hourminutesecondmillisecondy.La expresión
$dateToPartstiene la siguiente sintaxis:{ $dateToParts: { 'date' : <dateExpression>, 'timezone' : <timezone>, 'iso8601' : <boolean> } } El
$dateToPartsprocesa un documento con los siguientes campos:CampoObligatorio/OpcionalDescripcióndateRequerido
La fecha de entrada para la cual se devolverán las piezas.
<dateExpression>puede ser cualquier Expresión que se resuelve en una fecha, una marca de tiempo o un ObjectID. Para más información sobre expresiones, consulte Expresiones.timezoneOpcional
La zona horaria que se usará para formatear la fecha. Por defecto, usa
$dateToPartsUTC.<timezone>puede ser cualquier expresión que evalúe una cadena cuyo valor sea: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 establece en
true, modifica el documento de salida para usar campos de fecha de semana ISO. El valor predeterminado esfalse.
Comportamiento
Al utilizar un identificador de zona horaria de Olson en el campo <timezone>, MongoDB aplica el Desplazamiento del horario de verano, 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 la diferencia horaria del identificador de zona horaria Olson. El ejemplo utiliza los operadores $hour y para devolver las partes correspondientes del $minute date campo:
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 } }