Mongodb 按15分钟间隔的时间聚合组

Mongodb 按15分钟间隔的时间聚合组,mongodb,go,mgo,Mongodb,Go,Mgo,我试图计算15分钟内数据的平均速度。我得到了结果,它包含平均速度,但不确定它是否正确,对于15分钟组,也minutes为零 o3 := bson.M{ "$group": bson.M{ "_id": bson.M{ "minute": bson.M{ "$subtract": []interface{}{ "$timestamp", b

我试图计算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格式和日期类型


谢谢

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

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表达式如下(未经测试):


这是ISODate(2016-03-01T17:14:00.000Z)您似乎从该问题中获得了代码,但您误读了
$minute
,它实际上是一个聚合运算符,您将其解释为一个字段。因此,这里的BSON与表单不匹配,这就是为什么您没有得到正确的结果。我从“重复”问题、其他一些源代码和mongodb手册中获得了代码-因此我用所有这些代码制作了自己的版本:)。这就是您出错的地方。通过以下示例,您将获得正确的时间间隔。您得到的结果不正确,因为您偏离了原来的结果,并且误解了所用运算符的用途。这就是教训。我在翻译这些结构时遇到了问题,导致了我的版本的创建。获取
{“$mod”:[{“$minute”:“$timestamp”,15}]}
bson.M{“$mod”:[]接口{}{bson.M{“$minute”:“$timestamp”,},5,},},},},
对我来说并不容易。希望这对其他人也有帮助。注意到代码的来源缺乏引用。这是另一个标题几乎相同的问题:注意:
{“$mod”:[{“$minute”:“$timestamp”,15}]}
bson.M{“$mod”:[]接口{}{bson.M{“$minute”:“$timestamp”,},5,},},},
在Golang
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()