Golang MGO Group By multiple params 并按日期时间抓取最后一个
Golang MGO Group By multiple params and grab last by datetime
我正在使用 Golang 和 MGO 库
我有一些测试记录,我想按序列号、阶段、阶段顺序进行分组,并按日期时间字段获取最后一条记录。大多数情况下,每个 serial/stage/stage 订单有 1 条记录,但也可能有多个测试的情况,我想获取最后完成的测试,而不是该组合的所有测试。
所以,简而言之,我的 table 中有记录具有相同的序列、阶段和阶段顺序,但时间戳不同,我想获取整个数据集的最后一条或唯一一条记录这样我就有了每个(系列、阶段、阶段顺序)组合的单个记录,如果有重复测试,我总是会获取该组中的最后一条记录。
对于上面的示例,我只想取回该序列的第二条记录。
我的代码:
我试图创建一个管道,但似乎无法正确设置它:
pipeline := []bson.M{
bson.M{
"$match": bson.M{"workorder": i},
},
bson.M{
"$group": bson.M{
"_id": "id",
"serial": bson.M{"$match": "$serial"},
"stage": bson.M{"$match": "$stage"},
"order": bson.M{"$match": "$order"},
"date": bson.M{"$last": "$date_timestamp"},
},
},
}
尝试以下聚合。
在$group
前添加$sort
。
sort := bson.M{
"$sort": bson.M{
"date_timestamp": -1
}
}
group := bson.M{
{"$group": bson.M{
"_id": "$serial",
"stage": bson.M{"$last":"$stage"},
"order": bson.M{"$last":"$order"},
"datetime": bson:M{"$last":"$date_timestamp"}
}}
}
pipeline:= []bson.M{sort, group}
我正在使用 Golang 和 MGO 库
我有一些测试记录,我想按序列号、阶段、阶段顺序进行分组,并按日期时间字段获取最后一条记录。大多数情况下,每个 serial/stage/stage 订单有 1 条记录,但也可能有多个测试的情况,我想获取最后完成的测试,而不是该组合的所有测试。
所以,简而言之,我的 table 中有记录具有相同的序列、阶段和阶段顺序,但时间戳不同,我想获取整个数据集的最后一条或唯一一条记录这样我就有了每个(系列、阶段、阶段顺序)组合的单个记录,如果有重复测试,我总是会获取该组中的最后一条记录。
对于上面的示例,我只想取回该序列的第二条记录。
我的代码: 我试图创建一个管道,但似乎无法正确设置它:
pipeline := []bson.M{
bson.M{
"$match": bson.M{"workorder": i},
},
bson.M{
"$group": bson.M{
"_id": "id",
"serial": bson.M{"$match": "$serial"},
"stage": bson.M{"$match": "$stage"},
"order": bson.M{"$match": "$order"},
"date": bson.M{"$last": "$date_timestamp"},
},
},
}
尝试以下聚合。
在$group
前添加$sort
。
sort := bson.M{
"$sort": bson.M{
"date_timestamp": -1
}
}
group := bson.M{
{"$group": bson.M{
"_id": "$serial",
"stage": bson.M{"$last":"$stage"},
"order": bson.M{"$last":"$order"},
"datetime": bson:M{"$last":"$date_timestamp"}
}}
}
pipeline:= []bson.M{sort, group}