1 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
首先,Collection.Aggregate()
返回 a?mongo.Cursor
,而不是“直接”結(jié)果。您必須迭代游標(biāo)才能獲取結(jié)果文檔(例如使用Cursor.Next()
和Cursor.Decode()
),或使用Cursor.All()
一步獲取所有結(jié)果文檔。
接下來,您沒有指定要求和的字段。您所擁有的是一個(gè)簡單的“計(jì)數(shù)”,它將返回已處理的文檔數(shù)量。要真正對(duì)一個(gè)字段求和,你可以這樣做
"sum":?bson.M{"$sum":?"$fieldName"}
讓我們看一個(gè)例子。假設(shè)我們?cè)跀?shù)據(jù)庫"example"
、集合中有以下文檔"checks"
:
{?"_id"?:?ObjectId("5dd6f24742be9bfe54b298cb"),?"payment"?:?10?} {?"_id"?:?ObjectId("5dd6f24942be9bfe54b298cc"),?"payment"?:?20?} {?"_id"?:?ObjectId("5dd6f48842be9bfe54b298cd"),?"payment"?:?4?}
這是我們計(jì)算支票并對(duì)付款求和的方法(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]]
結(jié)果是一個(gè)包含一個(gè)元素的切片,顯示3文檔已處理,并且(付款)總和為34。
- 1 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)