mongodb3.4字符类型的字段求和

时间:2022-12-06 11:16:23

首先想到的是mongodb的聚合函数,具体操作如下:

表数据

db.test3.find({},{'content.targetCode':1,'content.result':1})

mongodb3.4字符类型的字段求和

使用聚合函数进行统计

db.test3.aggregate(
[{
"$match": {
"content.targetCode":'patExam'
}
},
{
"$group": {
"_id": null,
"Total": {
"$sum": "$content.result"
}
}
}
])

mongodb3.4字符类型的字段求和

上面的结果为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()

mongodb3.4字符类型的字段求和

统计完成后记得删除临时表res

db.res.drop()

2.修改原始数据将其由字符型改为浮点型

修改前的数据

mongodb3.4字符类型的字段求和

修改后的数据

db.test3.find().forEach( function (x) {x.content.result = parseFloat(x.content.result);db.test3.save(x);})

mongodb3.4字符类型的字段求和

此时在使用聚合函数统计

db.test3.aggregate(
[{
"$match": {
"content.targetCode":'patExam'
}
},
{
"$group": {
"_id": null,
"Total": {
"$sum": "$content.result"
}
}
}
])

mongodb3.4字符类型的字段求和