大家好,初学nosql, 我想在mongodb(在win7下)中统计一下2000个员工的工资总额 , 类似sql里面的sum()就行, 用的是java的morphia组件,
`String map = "function(){ emit( '1',{'v':this.value}); }";
String reduce = "function(key, values){ var count=0;var total=0;
for(var i in values){ total+=values[i].v; count++; } return
{'count':count,'total':total};}";`
执行后,返回的"count"值居然不是2000,而是993,也就是不知道什么原因,只统计了2000个员工中的993个,打印的日志是
`{ "result" : "t_1326770661390" , "timeMillis" : 78 , "timing" :
{ "mapTime" : 62 , "emitLoop" : 78 , "reduceTime" : 15 , "mode" : "mixed" , "total" : 78} ,
"counts" :
{ "input" : 1992 , "emit" : 1992 , "reduce" : 2 , "output" : 1} , "ok" : 1.0}`
求大神指点。
这个地方不是因为统计错了,而是因为你写错了,count不能简单的进行+1,因为对于每一个key,你无法确定reduce执行多少次,也没法确定mongodb是怎么执行的,这里最优执行是由mongodb自己决定的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。