我正在尝试通过流式传输,暂停,处理和恢复来处理MongoDB数据库中的数据。每个文档的处理最多可能需要2-3分钟,每个文档都由集群中的工作人员完成。我在master
中流式传输文档,然后将文档发送到workers
进行处理。问题是我在流中20-30分钟(或大约10个以上的文档)收到错误MongoError: cursor killed or timed out
。在处理时间低于此值之前,我已成功使用此方法。
配置:
node-mongodb-native@1.4.40
,mongodb version 3.0.5
,node 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 :(得分:0)
您可以通过调用addCursorFlag
将'noCursorTimeout'
标记添加到find()
返回的游标来禁用游标超时:
stream = collection.find(condition).addCursorFlag('noCursorTimeout', true).stream();