2017-02-25 12 views
0

Ich versuche, Daten in Mongodb zu aggregieren, nach Benutzer und MEZ Zeit mein Dokument zu gruppieren. Gemäß der Dokumentation, habe ich versucht, die folgenden:Gruppierung von MEZ Zeit in MongoDB

db.WORKING_HOURS.aggregate(
    [ 
     { 
     $group : { 
      _id : { user : "$user", date : { $add: [ "$heure", 60*60000 ] }}, 
      nombre: { $sum : 1 } 
     } 
     } 
    ] 
) 

Meine Daten haben diese Formen:

{ 
    "_id" : ObjectId("58b0b2bf32d3cd188cea9e1a"), 
    "user" : 1, 
    "heure" : ISODate("2017-02-24T22:25:03.180Z") 
} 

Ich bin richtig nicht in der Lage, um meine Daten zu aggregieren. Wie kann ich das beheben?

Antwort

0

Es gibt einige Probleme mit Ihrer Antwort.

Sie haben die Tageslichtersparnis nicht berücksichtigt , da CET UTC + 1 (Standardzeit) und UTC + 2 (Sommerzeit) verwendet.

gruppiert die gleichen Tag Werte über Jahre hinweg.

Sie können unten die Dinge versuchen.

Sie können Daten in der Serverzeit gruppieren und in die CET-Zeitzone konvertieren, bevor Sie sie dem Benutzer präsentieren.

Eine andere Alternative wäre add offset beim Hinzufügen von Datum in der Datenbank.

So etwas wie das.

{ 
    "date": ISODate("2017-02-24T00:00:00Z"), 
    "offsetmillis": 3600000 
} 
{ 
    "date": ISODate("2017-03-27T00:00:00Z"), 
    "offsetmillis": 7200000 
} 

Sie können die folgende Aggregation verwenden, um nach Datum zu gruppieren.

+0

Sie haben Recht, ich denke, Sie Lösung ist besser als meine, danke –

0

Das Problem war, dass ich versuchte, nach Datum zu gruppieren, aber die Zeit ändert sich ständig, so ist es normalerweise nicht möglich, meine Werte zu gruppieren, und es erklärt, warum ich mehrere Gruppen hinzufügen.

Um dies zu beheben, verwende ich den $ dayOfWeek Operator (ab Datum)

Ergebnis:

[ 
    { 
    $group : { 
     _id : {user : "$user", jour : {$dayOfYear : { $add: [ "$heure", 1000*60*60 ] }}}, 
     nombre: { $sum : 1 } 
    } 
    } 

]