2014-02-21 2 views
0

나는 수십만 개의 레코드가있는 timeseries 데이터 세트를 가지고 있습니다. mongo에서 집계 쿼리를 만들어 평균값을 계산하면서 간격으로이 데이터를 그룹화하려고합니다.timeseries 데이터 용 Mongodb 집계

이상적으로 나는 10 분 간격 (600000ms)과 가격 평균을 원합니다. 나는 내가있는 곳에서 계속하는 법을 너무 확신하지 못합니다.

데이터 ~ 수십만 기록 :

{ 
    "time" : 1391485215000, 
    "price" : "0.00133355", 
    } 

query = [ 
    { 
     "$project": { 
      "_id":"$_id", 
      "price":"$price", 
      "time": { 
       xxxx 
      } 
     } 
    }, 
    { 
     "$group": {xxxx} 
    } 
] 

답변

3

그래서 내가 내 스키마에 근본적인 결함을 한 것으로 나타납니다. mongo의 Date 유형 대신 epoch timestamp를 사용하고 있었고 다른 숫자를 double 대신 string으로 저장했습니다. 몇 가지 해결 방법을 시도했지만 올바른 유형이 아니라면 내장 된 집계 함수를 사용할 수있는 것처럼 보이지 않습니다.

$project: { 
     year: { $year: '$time'}, 
     month: { $month: '$time'}, 
     day: { $dayOfMonth: '$time'}, 
     hour: { $hour: '$time'}, 
     price: 1, 
     total: 1, 
     amount: 1 
    } 
}, 
{ 
    $group : { 
     _id: { year: '$year', month: '$month', day: '$day', hour: '$hour' }, 
     price:{ 
      $avg: "$price" 
     }, 
     high:{ 
      $max: "$price" 
     }, 
     low:{ 
      $min: "$price" 
     }, 
     amount:{ 
      $sum: "$amount" 
     }, 
     total:{ 
      $sum: "$total" 
     } 
    } 
+1

스키마의 결함을 발견하고 문제를 수정했습니다. 그래서 당신은이 문제를 해결할 수있었습니다. 날짜 형식을 지정하기 위해 ** substr의 ** 문서화되지 않은 ** 사용법에 대한 답변 [here] (http://stackoverflow.com/a/21695169/2313887)에 관심이있을 수 있습니다. –