MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agrégat Mongodb :convertir la date dans un autre fuseau horaire

En tant que mise à jour, MongoDB 3.6 a un nouveau paramètre de fuseau horaire pour la manipulation de date dans le cadre d'agrégation. La plupart des opérateurs liés à la date acceptent ce paramètre facultatif, voir $hour pour un exemple.

Par exemple, si nous avons un document dont la date correspond exactement au nouvel an en UTC :

> db.test.find()
{"_id": 1, "dt": ISODate("2018-01-01T00:00:00Z")}

Nous pouvons afficher la date dans le fuseau horaire de New 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 }

Nous pouvons également afficher la date dans le fuseau horaire 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 }

La description du fuseau horaire utilise la chaîne standard Olson Timezone Identifier.