按时间间隔15分钟的聚合组
我试图计算15分钟的平均数据速度。我得到的结果,它包含平均速度,但不知道它是正确的,并为15分钟集,也minutes
为零。按时间间隔15分钟的聚合组
o3 := bson.M{
"$group": bson.M{
"_id": bson.M{
"minute": bson.M{
"$subtract": []interface{}{
"$timestamp",
bson.M{
"$mod": []interface{}{
"$minute",
15,
},
},
},
},
},
"averageSpeed": bson.M{
"$avg": "$speed",
},
},
}
任何人做了类似的事情或可以帮助吗?
编辑:$时间戳字段是ISODate格式,日期型
谢谢
运行在蒙戈外壳下面的管道应该给你正确的结果:
pipeline = [
{
"$group": {
"_id": {
"year": { "$year": "$timestamp" },
"dayOfYear": { "$dayOfYear": "$timestamp" },
"minute_interval": {
"$subtract": [
{ "$minute": "$timestamp" },
{ "$mod": [{ "$minute": "$timestamp" }, 15] }
]
}
},
"averageSpeed": { "$avg": "$speed" }
}
}
]
db.collection.aggregate(pipeline)
的其等价的mGo表达如下(未测试):
pipeline := []bson.D{
bson.M{
"$group": bson.M{
"_id": bson.M{
"year": bson.M{ "$year": "$timestamp" },
"dayOfYear": bson.M{ "$dayOfYear": "$timestamp" },
"minute_interval": bson.M{
"$subtract": []interface{}{
bson.M{ "$minute": "$timestamp" },
bson.M{ "$mod": []interface{}{ bson.M{ "$minute": "$timestamp" }, 15, }, } }
}
}
},
"averageSpeed": bson.M{ "$avg": "$speed" }
}
}
}
pipe := collection.Pipe(pipeline)
iter := pipe.Iter()
注意到代码的来源缺乏引用。另一个问题,几乎相同的标题:[“在MongoDb 15分钟的时间间隔组结果”](http://stackoverflow.com/questions/26814427/group-result-by-15-minutes-time-interval- imongodb) –
note:'{“$ mod”:[{“$ minute”:“$ timestamp”,15}]}'是'bson.M {“$ mod”:[] interface {} {bson。 M {“$ minute”:“$ timestamp”,},5,},},'golang – user2343398
这是ISODate(2016-03-01T17:14:00.000Z) – user2343398
看来你从这个问题得到的代码,但你误读了'$分钟'这是一个实际上聚合算子,你已经把它解释为一个字段。所以这里的BSON与形式不匹配,为什么你没有得到正确的结果。 –
我从“重复”问题,一些其他来源和mongodb手册中获得代码 - 所以我用所有这些创建了我自己的版本:)。 – user2343398