Definição
$dateToPartsRetorna um documento que contém as partes constituintes de um determinado valor de data BSON como propriedades individuais. As propriedades retornadas são
year,month,day,hour,minute,secondemillisecond.You can set the
iso8601property totrueto return the parts representing an ISO week date instead. This will return a document where the properties areisoWeekYear,isoWeek,isoDayOfWeek,hour,minute,secondandmillisecond.The
$dateToPartsexpression has the following syntax:{ $dateToParts: { 'date' : <dateExpression>, 'timezone' : <timezone>, 'iso8601' : <boolean> } } The
$dateToPartstakes a document with the following fields:CampoObrigatório/OpcionalDescriçãodateObrigatório
A data de entrada para a qual as partes serão devolvidas.
<dateExpression>pode ser qualquer expressão que resolva para Date, Timestamp ou ObjectID. Para mais informações sobre expressões, consulte Expressões.timezoneOpcional
The timezone to use to format the date. By default,
$dateToPartsuses UTC.<timezone>pode ser qualquer expressão avaliada como uma string cujo valor seja:an Olson Timezone Identifier, such as
"Europe/London"or"America/New_York", orum deslocamento UTC no formato:
+/-[hh]:[mm], e.g."+04:45"ou+/-[hh][mm], e.g."-0530"ou+/-[hh], e.g."+03".
Para mais informações sobre expressões, consulte Expressões.
iso8601Opcional
Se definido como
true, modifica o documento de saída para usar campos de data semanal ISO. O padrão éfalse.
Comportamento
Ao usar um identificador de fuso horário Olson no campo <timezone>, o MongoDB aplica a compensação de horário de verão, se aplicável ao fuso horário especificado.
Por exemplo, considere uma collection sales com o seguinte documento:
db.sales.insertOne( { "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:15:39.736Z") } )
A seguinte agregação ilustra como o MongoDB lida com o deslocamento DST para o Identificador de fuso horário Olson. O exemplo utiliza os operadores $hour e $minute para retornar as partes correspondentes do 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" } } } }])
A operação retorna o seguinte resultado:
{ "_id": 1, "nycHour" : 5, "nycMinute" : 24, "gmtHour" : 10, "gmtMinute" : 24, "nycOlsonHour" : 6, "nycOlsonMinute" : 24 }
Exemplo
Considere uma coleção sales com o seguinte documento:
{ "_id" : 2, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2017-01-01T01:29:09.123Z") }
The following aggregation uses $dateToParts to return a document that contains the constituent parts of the date field.
db.sales.aggregate([ { $project: { date: { $dateToParts: { date: "$date" } }, date_iso: { $dateToParts: { date: "$date", iso8601: true } }, date_timezone: { $dateToParts: { date: "$date", timezone: "America/New_York" } } } }])
A operação retorna o seguinte 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 } }