MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Aggregat:Datum in eine andere Zeitzone konvertieren

Als Update hat MongoDB 3.6 einen neuen Zeitzonenparameter für die Datumsmanipulation im Aggregationsframework. Die meisten datumsbezogenen Operatoren akzeptieren diesen optionalen Parameter, siehe $hour für ein Beispiel.

Zum Beispiel, wenn wir ein Dokument haben, in dem das Datum genau das neue Jahr in UTC ist:

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

Wir können das Datum in der New Yorker Zeitzone anzeigen:

> 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 }

Wir können das Datum auch in der Zeitzone von Sydney anzeigen:

> 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 }

Die Zeitzonenbeschreibung verwendet die standardmäßige Olson Timezone Identifier-Zeichenfolge.