草庐IT

mongodb - Golang MGO Group By multiple params 并按日期时间抓取最后一个

coder 2024-07-09 原文

我正在使用 Golang 和 MGO 库

我有一些测试记录,我想按序列号、阶段、阶段顺序进行分组,并按日期时间字段获取最后一条记录。大多数情况下,每个序列/阶段/阶段订单有 1 条记录,但也可能有多个测试的情况,我想获取最后完成的测试,而不是该组合的所有测试。

所以,简而言之,我的表中有些记录具有相同的序列、阶段和阶段顺序,但时间戳不同,我想获取整个数据集的最后一条或唯一一条记录,以便我有一个记录每个(系列、阶段、阶段顺序)组合,如果有重复测试,我总是抓取该组中的最后一条记录。

在上面的示例中,我只想取回该系列的第二条记录。

我的代码: 我试图创建一个管道,但似乎无法正确设置它:

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}

关于mongodb - Golang MGO Group By multiple params 并按日期时间抓取最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49223031/

有关mongodb - Golang MGO Group By multiple params 并按日期时间抓取最后一个的更多相关文章

随机推荐