Golang使用MongoDB按多个值聚合组

Golang使用MongoDB按多个值聚合组,mongodb,go,aggregation-framework,aggregation,mongo-go,Mongodb,Go,Aggregation Framework,Aggregation,Mongo Go,我正在尝试使用group运算符进行聚合并将值乘以 我在MongoDB中进行了以下查询: db.Modules.aggregate([{$group: {_id: {"module":"$module","host":"$host"},"status":{$last:"$status"}}}]) 我使用包:go.mongodb.org 我想在Golang的代码中实现它: gro

我正在尝试使用group运算符进行聚合并将值乘以
我在MongoDB中进行了以下查询:

db.Modules.aggregate([{$group: {_id: {"module":"$module","host":"$host"},"status":{$last:"$status"}}}])
我使用包:go.mongodb.org
我想在Golang的代码中实现它:

group := bson.D{{"$group", bson.D{{"_id", bson.D{{"module", "$module", "host", "$host"}}}, {"time", bson.D{{"$last","$time"}}}, {"level", bson.D{{"$last","$level"}}}}}}

cursor, err := collection.Aggregate(ctx, mongo.Pipeline{group})
if err != nil {
    fmt.Println("Failed to Aggregate: ", err)
}
defer cursor.Close(ctx)
if err = cursor.All(ctx, &results); err != nil {
    fmt.Printf("cursor.All() error:", err)
}
当我想编译代码时,它返回以下错误:

too many values in primitive.E{...}

谁能告诉我我组中的错误在哪里。谢谢你的帮助

问题在于这个片段,这个复合文字:

bson.D{{"module", "$module", "host", "$host"}}
是字段的一部分,其中字段是键值对(即:2个元素),您尝试用4个值定义一个元素(一个字段)

应该是:

bson.D{{"module", "$module"}, {"host", "$host"}}
通常,应将这些表达式格式化为多行。更容易阅读,更容易理解,更容易修改

例如:

group := bson.D{
    {
        "$group", bson.D{
            {
                "_id", bson.D{
                    {"module", "$module"},
                    {"host", "$host"},
                },
            },
            {"time", bson.D{{"$last", "$time"}}},
            {"level", bson.D{{"$last", "$level"}}},
        },
    },
}

我刚刚试过,效果很好,问题是我声明了4个字段而不是2个。谢谢你的帮助!