2014-02-21 211 views
0

我有在它几十万记录的时间序列数据集。我正在尝试在mongo中创建一个聚合查询,以平均价格的时间间隔对这些数据进行分组。MongoDB的骨料时间序列数据

理想我想10分钟区间(600000ms),价格的平均水平。我不太确定如何从我所在的地方继续。

数据〜几十万条记录:

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

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

回答

3

所以这样看来,我在我的模式的根本缺陷。我用的是一个划时代的时间戳蒙戈代替的日期类型,以及存储等数字作为字符串代替双打。我尝试了一些解决方法,但它并不像你可以使用内置的聚合函数,除非它们是正确的类型。

$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

适合你。你在你的模式中找到了缺陷,并纠正了这个问题。这样你就可以解决这个问题。你可能会感兴趣的答案[这里](http://stackoverflow.com/a/21695169/2313887)的一些** **无证为了格式化您的日期$ SUBSTR的使用。 –