mongo-go-driver聚合查询始终返回“当前”:null

我想使用总结一个字段

pipeline := []bson.M{

bson.M{"$group": bson.M{

"_id": "",

"count": bson.M{ "$sum": 1}}}

}

ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)

result, err := collection.Aggregate(ctx, pipeline)

但它总是返回

"Current": null

有什么办法吗?

回答:

首先,Collection.Aggregate()返回mongo.Cursor,而不是“直接”结果。您必须遍历光标以获取结果文档(例如,使用Cursor.Next()Cursor.Decode()),或使用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.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

以上是 mongo-go-driver聚合查询始终返回“当前”:null 的全部内容, 来源链接: utcz.com/qa/418248.html

回到顶部