一、问题:
项目中有个代表个数的字段count,但是存的时候存的String类型。通过mongodb的group然后用$max做聚合,多次测试发现无效,原因就是count的类型导致的。
二、解决方法:
1、用mapReduce来做
db.getCollection('***').mapReduce(
function(){
emit({"sn":this.sn,"appCode":this.appCode,"name":this.nodename},this.count);
},
function(key, values) {
var maxTmp=values[0];
for(var i=1;i<values.length;i++){
if(maxTmp<parseInt(values[i]))
maxTmp=parseInt(values[i]);
}
return maxTmp;
},
{
query:{
},
out:"temp_max_count"
}
)
2、然后通过
db.getCollection('temp_max_count').find({})
可查到结果
3、用project做一个展开
db.getCollection('temp_max_count').aggregate([
{
$project:{
"sn" : "$_id.sn",
"app_code" : "$_id.appCode",
"nodename":"$_id.nodename",
"maxCountHistory":"$value"
}
}
])