2016-10-10 13 views
0

MongoDb時系列集約で平均を取ることができるのだろうかと思います。たとえば、毎分の平均的な一時的な時間を示す集合体です。MongoDB集約(時間と平均)

私のデータは次のようになります。の出力で

[ 
    { 
    "_id": "57fbebf99929a71d305e2bb2", 
    "temp": 23.77, 
    "dateTime": "2016-10-10T19:28:57.923Z", 
    "_dateTime": 1476127737000 
    }, 
    { 
    "_id": "57fbebfa9929a71d305e2bb3", 
    "temp": 27.16, 
    "dateTime": "2016-10-10T19:28:58.838Z", 
    "_dateTime": 1476127738000 
    }, 
    { 
    "_id": "57fbebff9929a71d305e2bb4", 
    "temp": 31.93, 
    "dateTime": "2016-10-10T19:29:03.848Z", 
    "_dateTime": 1476127743000 
    } 
] 

コード(ジャバスクリプト)これまでのところ、このようになります。..

var results = temperatures.aggregate(
    [ 
     { $project : { "timeSpan" : {$add : [new Date(0),"$_dateTime"] } } }, 
     { $project : { "minuteRead" : { $minute : "$timeSpan" }} }, 
     { 
      $group : { 
       _id : {minuteRead : "$minuteRead" }, 
       count : { $sum : 1 } 
      } 
     } 
    ], 
    function(err, result) { 
     console.log(result); 
    } 
); 

[ { _id: { minuteRead: 30 }, count: 7 }, 
    { _id: { minuteRead: 29 }, count: 12 }, 
    { _id: { minuteRead: 28 }, count: 2 } ] 

しかし、どのような私は持っていたい:

[ { _id: { minuteRead: 30 }, avgTemp: 17.6 }, 
    { _id: { minuteRead: 29 }, avgTemp: 18.3 }, 
    { _id: { minuteRead: 28 }, avgTemp: 20.1 } ] 

これは可能ですか?

ありがとうございました!

答えて

0

"$ avgが"

$group : { 
       _id : {minuteRead : "$minuteRead" }, 
       avgTemp : { $avg :"$temp" } 
      } 
+0

私もそう思っていましたが、$ temp値はアクセス可能ではないようです。それを$プロジェクトに追加する必要がありますか? '{_id:{minuteRead:28}、avgTemp:null} {0} {0} {0} {0} {0} {0} {0} {0} }] ' – wmmhihaa

0

がそれを手に入れたトリックを行うだろう!

temperatures.aggregate(
     [ 
      { $project: { temp:'$temp', "timeSpan": { $add: [new Date(0), "$_dateTime"] } }}, 
      { $project: { "timestamp": { $minute: "$timeSpan" }, temp:'$temp' } }, 
      { 
       $group: { 
        _id: { minuteRead: "$timestamp" }, 
        avgTemp : { $avg :"$temp" } 
       } 
      } 
     ], 
     function (err, result) { 
      if (err) 
       console.log("ERROR " + err); 
      else 
       console.log(result); 
     } 
    );