MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agregado Mongodb:converter data para outro fuso horário


Como atualização, o MongoDB 3.6 possui um novo parâmetro de fuso horário para manipulação de data na estrutura de agregação. A maioria dos operadores relacionados a datas aceitam este parâmetro opcional, veja $hora para um exemplo.

Por exemplo, se temos um documento onde a data é exatamente o ano novo em UTC:
> db.test.find()
{"_id": 1, "dt": ISODate("2018-01-01T00:00:00Z")}

Podemos exibir a data no fuso horário de Nova York:
> db.test.aggregate([
...     {$project:{
...         date:{$dayOfMonth:{date:'$dt',timezone:'America/New_York'}},
...         month:{$month:{date:'$dt',timezone:'America/New_York'}},
...         year:{$year:{date:'$dt',timezone:'America/New_York'}},
...         hour:{$hour:{date:'$dt',timezone:'America/New_York'}}
...     }}
... ])
{ "_id": 1, "date": 31, "month": 12, "year": 2017, "hour": 19 }

Também podemos exibir a data no fuso horário de Sydney:
> db.test.aggregate([
...     {$project:{
...         date:{$dayOfMonth:{date:'$dt',timezone:'Australia/Sydney'}},
...         month:{$month:{date:'$dt',timezone:'Australia/Sydney'}},
...         year:{$year:{date:'$dt',timezone:'Australia/Sydney'}},
...         hour:{$hour:{date:'$dt',timezone:'Australia/Sydney'}}
...     }}
... ])
{ "_id": 1, "date": 1, "month": 1, "year": 2018, "hour": 11 }

A descrição do fuso horário está usando a string Olson Timezone Identifier padrão.