2014-09-23 116 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" ] } } } 
]) 

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