按时间间隔15分钟聚集组

时间:2016-03-08 07:37:32

标签: mongodb go mgo

我试图计算15分钟的平均数据速度。我得到了结果,它包含平均速度,但不确定它是否正确,对于15分钟的集合,minutes也是零。

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",
        },
    },
}

有人做过类似的事情还是可以提供帮助?

编辑:$ timestamp字段是ISODate格式和日期类型

谢谢

1 个答案:

答案 0 :(得分:0)

在mongo shell中运行以下管道应该会给你正确的结果:

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()

其中等效的mGo表达式(未经测试):

{{1}}