开发者社区> 问答> 正文

mongodb mapreduce执行次数不足的原因

大家好,初学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}
`
求大神指点。

展开
收起
落地花开啦 2016-02-21 16:31:16 2841 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    这个地方不是因为统计错了,而是因为你写错了,count不能简单的进行+1,因为对于每一个key,你无法确定reduce执行多少次,也没法确定mongodb是怎么执行的,这里最优执行是由mongodb自己决定的。

    2019-07-17 18:46:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载