2017-02-25 69 views
0

我試圖在mongodb中彙總數據,按用戶和CET時間分組我的文檔。根據該文件,我試過如下:在MongoDB中按CET時間分組

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

我的數據有這些形式:

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

我不能夠正確地聚合我的數據。我怎樣才能解決這個問題 ?

回答

0

有你的回答幾個問題。

因爲CET使用UTC + 1(標準時間)和UTC + 2(夏令時),所以您沒有將日光節省考慮在內 。

$dayOfYear將在同一年的數值中分組。

你可以試試下面的東西。

您可以將服務器時間中的日期分組,並在將其呈現給用戶之前轉換爲CET時區。

其他替代方法是在數據庫中添加日期時添加偏移量。

就是這樣。

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

您可以使用下面的聚合按日期進行分組。

{ 
    $group: { 
    _id: { 
     date: {$dayOfMonth: {$add: ["$date", "$offsetmillis"]}}, 
     month: {$month: {$add: ["$date", "$offsetmillis"]}}, 
     year: {$year: {$add: ["$date", "$offsetmillis"]}} 
    }, 
     count: {$sum: 1} 
    } 
} 
+0

你說得對,我認爲你的解決方案比我的好,謝謝 –

0

問題是我試圖按日期分組,但時間不斷變化,所以通常不可能將我的值分組,並且它解釋了爲什麼我添加了多個組。

爲了解決這個問題,我使用$一個dayOfWeek操作(從日)

結果:

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

]