2016-04-30 30 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