我有一个时间序列数据集,里面有几十万条记录。我正在尝试在mongo中创建聚合查询,以便在平均价格的同时对这些数据进行分组。
理想情况下,我希望10分钟间隔(600000毫秒)和平均价格。我不太确定如何从我所处的位置继续进行。
数据〜几十万条记录:
{
"time" : 1391485215000,
"price" : "0.00133355",
}
query = [
{
"$project": {
"_id":"$_id",
"price":"$price",
"time": {
xxxx
}
}
},
{
"$group": {xxxx}
}
]
答案 0 :(得分:3)
所以看起来我的架构中存在一个根本性的缺陷。我使用了一个纪元时间戳而不是mongo的Date类型,以及将其他数字存储为字符串而不是双精度数。我尝试了一些解决方法,但看起来你不能使用内置的聚合函数,除非它们的类型正确。
$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"
}
}