【发布时间】:2018-06-26 14:34:47
【问题描述】:
我想计算 MongoDB 中数据的移动平均值。我的数据结构如下
{
"_id" : NUUID("54ab1171-9c72-57bc-ba20-0a06b4f858b3"),
"DateTime" : ISODate("2018-05-30T21:31:05.957Z"),
"Type" : 3,
"Value" : NumberDecimal("15.905414991993847")
}
我想在 2 天内每 5 秒计算每种类型的平均值。在这种情况下,我将 Type 放入 $match 管道中,但我更喜欢将结果按 Type 分组,并按 Type 分隔结果。我做的事情如下
var start = new Date("2018-05-30T21:31:05.957Z");
var end = new Date("2018-06-01T21:31:05.957Z");
var arr = new Array();
for (var i = 0; i < 34560; i++) {
start.setSeconds(start.getSeconds() + 5);
if (start <= end)
{
var a = new Date(start);
arr.push(a);
}
}
db.Data.aggregate([
{$match:{"DateTime":{$gte:new Date("2018-05-30T21:31:05.957Z"),
$lte:new Date("2018-06-01T21:31:05.957Z")}, "Type":3}},
{$bucket: {
groupBy: "$DateTime",
boundaries: arr,
default: "Other",
output: {
"count": { $sum: 1 },
"Value": {$avg:"$Value"}
}
}
}
])
看起来,它正在工作,但性能太慢了。我怎样才能让它更快?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework