2017-02-25 12 views
0

私はmongodbでデータを集約しようとしています。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

は、あなたの答えに問題がいくつかあります:

は、この問題を解決するために、私は(日)からの$のdayOfWeek演算子

の検索結果を使用します。

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

問題は、日付でグループ化しようとしましたが、時間が絶えず変化しているため、通常は値をグループ化することができず、複数のグループを追加する理由が説明されています。

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

]