Javascript 在游标上执行forEach函数时发生getMore错误

Javascript 在游标上执行forEach函数时发生getMore错误,javascript,mongodb,mongodb-query,database,Javascript,Mongodb,Mongodb Query,Database,大家好,我的社区 我在对我的一个集合执行更新时遇到问题 问题是,当我运行函数时,大约10-15分钟后,我会出现以下错误: mongo im使用的版本为:2.4.6 Error: getMore: cursor didn't exist on server, possible restart or timeout? src/mongo/shell/query.js:113 更新并不复杂,但成本很高,因为首先我必须找到符合条件的所有文档,并使用forEach函数遍历每个文档以从另一个集合中获取值,

大家好,我的社区

我在对我的一个集合执行更新时遇到问题

问题是,当我运行函数时,大约10-15分钟后,我会出现以下错误:

mongo im使用的版本为:2.4.6

Error: getMore: cursor didn't exist on server, possible restart or timeout? src/mongo/shell/query.js:113
更新并不复杂,但成本很高,因为首先我必须找到符合条件的所有文档,并使用forEach函数遍历每个文档以从另一个集合中获取值,一旦获得该值,我将保存de document并对其中一个字段执行和更新。这是密码

db.events.find({'$or':[{'event.type':'EXBC'},{'event.type':'ENBC'}],'event.value.major':{'$exists':true}}).forEach(function (doc1) {
    var doc2 = db.regions.findOne({ 'beaconId.major': doc1.event.value.major,'beaconId.minor':doc1.event.value.minor,'group.uuid':doc1.event.value.uuid });

if (doc2 != null) {

    doc1.event.value.beacon = doc2._id;
    db.events.save(doc1);
    //OPTIONAL, I THINK IT TAKES TOO MUCH TIME THIS WAY


    if(doc1.event.type == "EXBC"){
    db.events.update({'_id':doc1._id}, {$set:{'event.source':'SDK','event.type':'MOB','event.extType':'BCN','event.action':'EXT'},
                                                 $unset:{'event.value.major':'','event.value.minor':'','event.value.uuid':''}});
    }

    else{
    db.events.update({'_id':doc1._id}, {$set:{'event.source':'SDK','event.type':'MOB','event.extType':'BCN','event.action':'ENT'},
                                                 $unset:{'event.value.major':'','event.value.minor':'','event.value.uuid':''}});
    }
}   
});

如果有人能帮我找出我做错了什么,我将不胜感激。

您的意思是在创建初始光标10-15分钟后出现错误吗?如果是这样,MongoDB将在10分钟不活动后关闭服务器端的游标,以避免内存泄漏。

是的,这就是正在发生的事情,我只是不知道如何避免mongo在10分钟后关闭游标。您无法控制它--您需要更改逻辑。有一个不关闭光标的选项,但这实际上意味着您在服务器端引入了内存泄漏。这不是一个解决办法。