Golang 聚合按 MongoDB 的多个值分组
Golang aggregation group by multiple values with MongoDB
我正在尝试使用组运算符和倍数值进行聚合
我在 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)
}
当我想编译我的代码时 returns 出现以下错误:
too many values in primitive.E{...}
任何人都可以告诉我我组中的错误在哪里。感谢您的帮助!
问题在于这个片段,这个复合文字:
bson.D{{"module", "$module", "host", "$host"}}
bson.D
是一片字段,其中字段是键值对(即: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"}}},
},
},
}
我正在尝试使用组运算符和倍数值进行聚合
我在 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)
}
当我想编译我的代码时 returns 出现以下错误:
too many values in primitive.E{...}
任何人都可以告诉我我组中的错误在哪里。感谢您的帮助!
问题在于这个片段,这个复合文字:
bson.D{{"module", "$module", "host", "$host"}}
bson.D
是一片字段,其中字段是键值对(即: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"}}},
},
},
}