Golang使用MongoDB按多个值聚合组
我正在尝试使用group运算符进行聚合并将值乘以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
我在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个。谢谢你的帮助!