首先想到的是mongodb的聚合函数,具体操作如下:
表数据
db.test3.find({},{'content.targetCode':1,'content.result':1})
使用聚合函数进行统计
db.test3.aggregate(
[{
"$match": {
"content.targetCode":'patExam'
}
},
{
"$group": {
"_id": null,
"Total": {
"$sum": "$content.result"
}
}
}
])
上面的结果为0,聚集函数无法对字符型的字段求和,要想求和有以下2个方案:
1.采用mapReduce(将字符串转换成浮点型)
var map = function(){
emit(this.content.targetCode,this.content.result);
}
var reduce = function(key,values){
var cnt = 0.0;
values.forEach(function(val){cnt+=parseFloat(val);});
return {"sumAll":cnt};
}
db.test3.mapReduce(map,reduce,{query:{},out:'res'})
db.res.find()
统计完成后记得删除临时表res
2.修改原始数据将其由字符型改为浮点型
修改前的数据
修改后的数据
db.test3.find().forEach( function (x) {x.content.result = parseFloat(x.content.result);db.test3.save(x);})
此时在使用聚合函数统计
db.test3.aggregate(
[{
"$match": {
"content.targetCode":'patExam'
}
},
{
"$group": {
"_id": null,
"Total": {
"$sum": "$content.result"
}
}
}
])