首先,
Collection.Aggregate()返回
mongo.Cursor,而不是“直接”结果。您必须遍历光标以获取结果文档(例如,使用
Cursor.Next()和
Cursor.Depre()),或使用
Cursor.All()一步来获取所有结果文档。
接下来,您没有指定要累加的字段。您所拥有的是一个简单的“计数”,它将返回已处理文档的数量。要真正总结一个字段,您可以使用
"sum": bson.M{"$sum": "$fieldName"}
让我们来看一个例子。假设我们
"example"在Collection中有以下文档
"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.Mif 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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)