我正在尝试通过流式传输、暂停、处理和恢复来处理MongoDB数据库中的数据。每个文档的处理可能需要2-3分钟,每个文档由集群中的一个工作人员完成。我在master
中流式传输文档,然后将文档发送到workers
进行处理。问题是我在流中(或关于10+文档) 20-30分钟内收到错误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()
});
});
});
发布于 2016-05-01 02:56:31
您可以通过调用addCursorFlag
向find()
返回的游标添加'noCursorTimeout'
标志来禁用游标超时
stream = collection.find(condition).addCursorFlag('noCursorTimeout', true).stream();
https://stackoverflow.com/questions/36958743
复制相似问题