我必须从下面的集合中找到总票数(搞笑+有用+酷)。 我怎样才能使用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}
有没有其他方法可以实现这一目标?
答案 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" ] } } }
])
希望结果正是您所需要的。