MongoDB查询中的$ sum

时间:2014-09-23 19:21:55

标签: mongodb aggregation-framework nosql

我必须从下面的集合中找到总票数(搞笑+有用+酷)。 我怎样才能使用Mongo聚合函数

{
    "_id" : ObjectId("5419a8856039fe9f52640bd1"),
    "votes" : {
        "funny" : 0,
        "useful" : 2,
        "cool" : 1
    },

    "business_id" : "vcNAWiLM4dR7D2nwwJ7nCA"
}
,
{
    "_id" : ObjectId("5419a8866039fe9f52640bd2"),
    "votes" : {
        "funny" : 0,
        "useful" : 2,
        "cool" : 0
    },

    "business_id" : "vcNAWiLM4dR7D2nwwJ7nCA"
}

我尝试了以下

db.review.aggregate([ { 
    $project: { 

        total_votes:  
           "$votes.funny"+ "$votes.useful"  + "$votes.cool"

    } 
} ] ,
{
   allowDiskUse : true
}) 

但是我正在

  

未捕获的异常:聚合失败:{“errmsg”:“exception:   聚合结果超出最大文档大小(16MB)“,”代码“:   16389,“ok”:0}

有没有其他方法可以实现这一目标?

2 个答案:

答案 0 :(得分:2)

您可以使用$add聚合运算符执行此操作:

db.review.aggregate([
    {$project: {
        total_votes: {$add: ['$votes.funny', '$votes.useful', '$votes.cool']}
    }}
])

输出:

{
    "result" : [ 
        {
            "_id" : ObjectId("5419a8856039fe9f52640bd1"),
            "total_votes" : 3
        }, 
        {
            "_id" : ObjectId("5419a8866039fe9f52640bd2"),
            "total_votes" : 2
        }
    ],
    "ok" : 1
}

答案 1 :(得分:1)

这可以这样做 -

db.review.aggregate([ 
{ $project : { 'total_votes' : { $add : ["$votes.funny", "$votes.useful", "$votes.cool" ]  } }  }
])

希望结果正是您所需要的。