2014-09-23 76 views
0

我必须从下面的集合中找到总票数(好笑+有用+酷)。 我怎样才能实现这一目标使用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”:“异常: 汇总结果超过最大文件大小(16MB)“,”代码“: 16389,”ok“: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

这是可以做到这样的 -

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

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