您好stackoverflow社区,
我在对其中一个系列执行更新时遇到问题。
问题是,当我运行我的功能时,大约10-15分钟后,我收到以下错误:
使用的mongo版本是:2.4.6
Error: getMore: cursor didn't exist on server, possible restart or timeout? src/mongo/shell/query.js:113
更新并不复杂,但是成本很高,因为首先我必须找到满足条件的所有文档,并使用forEach函数遍历每个文档以从另一个集合中获取值,一旦我有了这个值我保存de文档并执行和更新其中一个字段。这是代码
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':''}});
}
}
});
如果有人能帮助我弄清楚我做错了什么,我将不胜感激。
答案 0 :(得分:1)
您的意思是在创建初始光标后10-15分钟出现错误吗?如果是这样,MongoDB会在10分钟不活动后关闭服务器端的光标,以避免内存泄漏。