mongodb mapreduce数据合并不全

yangheng33 2012-01-14 04:11:29
表结构是
name 张三 ,value 112
name 李四 ,value 3213
name 王二 ,value 987
name 麻子 ,value 987
... ...

目标是做一个类似sql里面的sum操作, 求出 value之和 , 初学mongodb,没有用group,想试试mapreduce,
用的是java的morphia组件, 其中map和reduce函数如下( count用来查看统计了多少条数据,total为统计结果) :

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};}";


实际数据是1500条,可运行完毕后,count只有500,也就是只统计了其中500条数据,
从输出的日志看到,reduce拆分了两次,这500条是第二次执行的结果,第一次执行的1000被遗忘了, 在网上搜索一天了,实在没有头绪了,只有向大伙请教,应该怎么处理呢?

输出的日志是:

{ "result" : "t_1326391379413" , "timeMillis" : 118 , "timing" :
{ "mapTime" : 72 , "emitLoop" : 107 , "reduceTime" : 19 , "mode" : "mixed" , "total" : 118} , "counts" :
{ "input" : 1500 , "emit" : 1500 , "reduce" : 2 , "output" : 1} , "ok" : 1.0}


...全文
405 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小臣 2014-05-06
  • 打赏
  • 举报
回复
可能因为有相同value的文档被归并为一次
yushang2928154 2014-03-25
  • 打赏
  • 举报
回复
我也遇到几乎是同样的问题,请问楼主解决了吗?
yangheng33 2012-01-17
  • 打赏
  • 举报
回复
我测试了一下,
当用户总数为2000时, 能统计993个用户
当用户总数为1500时,能统计501个用户
当用户总数为1200时,能统计201个用户
当用户数在1000以下时,能统计全部用户
不会吧, 顶顶大名的mapreduce只能统计1000条以下的数据? 还是需要做什么设置呢?

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧