2016-10-10 5 views
0

MongoDb 시계열 집계를 통해 평균을 수행 할 수 있는지 궁금합니다. 예를 들어 매분마다 평균 온도를 제공하는 집계.MongoDB 집계 (시간 및 평균)

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

그러나 :의 출력과

[ 
    { 
    "_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 }, avgTemp: 17.6 }, 
    { _id: { minuteRead: 29 }, avgTemp: 18.3 }, 
    { _id: { minuteRead: 28 }, avgTemp: 20.1 } ] 

이것이 가능합니까?

감사합니다.

답변

0

은 "$ 평균"

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

나는 너무 생각했지만 $ temp 값은 액세스 할 수없는 것으로 보입니다. $ 프로젝트에 추가해야합니까? '{_id : {minuteRead : 29}, avgTemp : null}, ' '{_id : {minuteRead : 28}, avgTemp : null} }]' – 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); 
     } 
    );