Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB MapReduce:超过1000条记录未按预期工作_Mongodb_Mapreduce - Fatal编程技术网

MongoDB MapReduce:超过1000条记录未按预期工作

MongoDB MapReduce:超过1000条记录未按预期工作,mongodb,mapreduce,Mongodb,Mapreduce,我编写了一个mapreduce函数,其中记录以以下格式发出 {userid:<xyz>, {event:adduser, count:1}} {userid:<xyz>, {event:login, count:1}} {userid:<xyz>, {event:login, count:1}} {userid:<abc>, {event:adduser, count:1}} {userid:<xyz>,{events: [{addu

我编写了一个mapreduce函数,其中记录以以下格式发出

{userid:<xyz>, {event:adduser, count:1}}
{userid:<xyz>, {event:login, count:1}}
{userid:<xyz>, {event:login, count:1}}
{userid:<abc>, {event:adduser, count:1}}
{userid:<xyz>,{events: [{adduser:1},{login:2}], allEventCount:3}}
无法理解此
未定义的
来自何处,并且单个事件的总和小于allEventCount。集合中的所有文档都有非空字段
event
,因此没有未定义的可能性

Mongo DB版本--2.2.1 环境——本地机器,无分片

在reduce函数中,为什么此操作失败
result.events[n][ev]+=value.allEventCount当类似操作
result.allEventCount+=value.allEventCount时通行证

约翰尼建议的正确答案

减少功能:

    var reducefn = function(key,values){
    var result = {totEvents:0, event:[]};
    values.forEach(function(value){
        value.event.forEach(function(eventElem){
            var notfound=true;
            for(var n = 0; n < result.event.length; n++){
                eventObj = result.event[n];
                for(ev in eventObj){
                for(evv in eventElem){
                    if(ev==evv){
                        result.event[n][ev] += eventElem[evv];
                        notfound=false;
                        break;
                    }
                }}
            }
            if(notfound==true){ 
                result.event.push(eventElem);
            }
        });
        result.totEvents += value.totEvents;
    });
    return result;
}
var reducefn=函数(键、值){
var result={totEvents:0,事件:[]};
values.forEach(函数(值){
value.event.forEach(函数(eventElem){
var notfound=true;
对于(var n=0;n
您从
map
函数发出的
对象的形状必须与从
reduce
函数返回的对象相同,因为
reduce
的结果可以在处理大量文档时反馈到
reduce

因此,您需要更改您的
emit
以如下方式发送文档:

{userid:,{events:[{adduser:1}],allEventCount:1}
{userid:,{events:[{login:1}],allEventCount:1}

然后相应地更新
reduce
函数。

谢谢@JohnyHK。这就是问题所在,我们现在已经纠正了。
{ "_id" : {...}, "value" :{"allEventCount" :30, "events" :[ { "undefined" : 1},
{"adduser" : 1 }, {"remove" : 3 }, {"training" : 1 }, {"adminlogin" : 1 }, 
{"downgrade" : 2 } ]} }
    var reducefn = function(key,values){
    var result = {totEvents:0, event:[]};
    values.forEach(function(value){
        value.event.forEach(function(eventElem){
            var notfound=true;
            for(var n = 0; n < result.event.length; n++){
                eventObj = result.event[n];
                for(ev in eventObj){
                for(evv in eventElem){
                    if(ev==evv){
                        result.event[n][ev] += eventElem[evv];
                        notfound=false;
                        break;
                    }
                }}
            }
            if(notfound==true){ 
                result.event.push(eventElem);
            }
        });
        result.totEvents += value.totEvents;
    });
    return result;
}