1 回答
TA贡献1878条经验 获得超4个赞
首先,Collection.Aggregate()
返回 a mongo.Cursor
,而不是“直接”结果。您必须迭代游标才能获取结果文档(例如使用Cursor.Next()
和Cursor.Decode()
),或使用Cursor.All()
一步获取所有结果文档。
接下来,您没有指定要求和的字段。您所拥有的是一个简单的“计数”,它将返回已处理的文档数量。要真正对一个字段求和,你可以这样做
"sum": bson.M{"$sum": "$fieldName"}
让我们看一个例子。假设我们在数据库"example"
、集合中有以下文档"checks"
:
{ "_id" : ObjectId("5dd6f24742be9bfe54b298cb"), "payment" : 10 } { "_id" : ObjectId("5dd6f24942be9bfe54b298cc"), "payment" : 20 } { "_id" : ObjectId("5dd6f48842be9bfe54b298cd"), "payment" : 4 }
这是我们计算支票并对付款求和的方法(payment
字段):
c := client.Database("example").Collection("checks")
pipe := []bson.M{
{"$group": bson.M{
"_id": "",
"sum": bson.M{"$sum": "$payment"},
"count": bson.M{"$sum": 1},
}},
}
cursor, err := c.Aggregate(ctx, pipe)
if err != nil {
panic(err)
}
var results []bson.M
if err = cursor.All(ctx, &results); err != nil {
panic(err)
}
if err := cursor.Close(ctx); err != nil {
panic(err)
}
fmt.Println(results)
这将输出:
[map[_id: count:3 sum:34]]
结果是一个包含一个元素的切片,显示3文档已处理,并且(付款)总和为34。
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报