mongo的mapReduce

qq_34858601 2016-06-25 03:34:13
准备用mongo的mapReduce统计网站的访问信息。
var query = {'time' : {'$gtr' : start, '$lt' : end}};
var map = function() {
emit({"agent" : this.agent, "link" : this.link}, {"ip" : [this.ip], "uid" : [this.id], "ir" : [this.ir]});
};

var reduce = function(k, v) {
var ip = [];
var uid = [];
var ir = [];
v.forEach(function(obj) {
Array.prototpye.push.apply(ip, v.ip);
Array.prototpye.push.apply(uid, v.uid);
Array.prototpye.push.apply(ir, v.ir);
});
return {"ip" : ip, "uid" : uid, "ir" : ir};
}

var finalize = function(k, v) {
var ips = v.ip.length;
var ipsu = Array.unique(v.ip).length;
var ids = v.id.length;
var idsu = Array.unique(v.id).length;
var irs = v.ir.length;
var irsu = Array.unique(v.ir).length;
return {"ips" : ips, "ipsu" : ipsu, "ids" : ids, "idsu" : idsu, "irs" : irs, "irsu" : irsu};
};


数据量稍微大点就会报错
"errmsg" : "exception: Converting from JavaScript to BSON failed: Object size 18337514 exceeds limit of 16793600 bytes.",
"code" : 17260,
"ok" : 0

看起来是reduce结果的数据元素太多导致超限,谁有办法解决这个问题?
...全文
115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-06-25
  • 打赏
  • 举报
回复
你这个问题只不过是要计算出某几个字段的个数,以及unique排重后的个数,用普通的query就可以了,没必要用mapreduce的。

用mapreduce的方法一般有两个前提,一个是任务可并行拆分(可map),第二是能通过迭代合并结果集(可reduce)。你这个需求并不满足第二个前提,所以用mapreduce不合适。

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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