首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mongo-go-driver聚合查询总是返回"Current":null

mongo-go-driver聚合查询总是返回"Current":null
EN

Stack Overflow用户
提问于 2019-11-22 02:50:46
回答 1查看 1.7K关注 0票数 1

我想通过使用以下命令对一个字段求和

代码语言:javascript
复制
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)

但它总是会返回

代码语言:javascript
复制
"Current": null

有什么解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 04:35:09

首先,Collection.Aggregate()返回一个mongo.Cursor,而不是“直接”结果。您必须遍历游标以获取结果文档(例如,使用Cursor.Next()Cursor.Decode()),或者使用Cursor.All()在一步中获取所有结果文档。

接下来,您没有指定要求和的字段。您所拥有的是一个简单的“计数”,它将返回已处理的文档数量。要真正对字段求和,可以使用

代码语言:javascript
复制
"sum": bson.M{"$sum": "$fieldName"}

让我们来看一个例子。假设我们在集合"checks"中的数据库"example"中有以下文档

代码语言:javascript
复制
{ "_id" : ObjectId("5dd6f24742be9bfe54b298cb"), "payment" : 10 }
{ "_id" : ObjectId("5dd6f24942be9bfe54b298cc"), "payment" : 20 }
{ "_id" : ObjectId("5dd6f48842be9bfe54b298cd"), "payment" : 4 }

这是我们计算支票数量和支付金额的方法(payment字段):

代码语言:javascript
复制
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)

这将输出:

代码语言:javascript
复制
[map[_id: count:3 sum:34]]

结果是一个包含一个元素的切片,显示处理了3文档,并且(支付的)总和是34

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58981825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档