2016-04-30 55 views
2

我想通过流式处理,暂停,处理和恢复来处理MongoDB数据库中的数据。每个文档的处理过程可能需要2-3分钟,每个文档都由集群中的工作人员完成。我在master中传输文档,然后将文档发送到workers进行处理。问题是我正在错误MongoError: cursor killed or timed out 20-30分钟进入流(或约10 +文件)。在处理时间低于此值之前,我已成功使用此方法。MongoError:光标死亡或超时

配置: [email protected]mongodb version 3.0.5node 0.10

MongoClient.connect(config.mongodb, function(err, db) { 
    if (err) helper.logError(err) 
    var collection = db.collection('collectionName'); 
    stream = collection.find(condition).stream(); 
    stream.on("data", function(doc) { 
    stream.pause(); 
    doSomeProcessing().then(function(){ 
     stream.resume() 
    }); 
    }); 
}); 
+0

嗨,你有没有解决你的问题? – DaTebe

+0

不,我重新设计我如何查询它。 – harinsa

回答

0

您可以通过添加'noCursorTimeout'标志由find()返回光标通过调用addCursorFlag禁用光标超时:

stream = collection.find(condition).addCursorFlag('noCursorTimeout', true).stream(); 
+0

驱动程序版本1.4没有该标志,它有一个超时选项,但不起作用。 – harinsa