2016-01-02 59 views
2

我正在使用nodejs上的stream將mongodb轉儲到另一個mongodb。Mongodb流調用'結束'事件太早

我每個副本集大約有1000萬個文檔。但流調用'數據'事件只有100萬次或更少,然後它調用'結束'事件。所以我不能讓文檔等於總文檔('data'事件計數比stream.count低很多)。

請注意,'結束'事件後沒有'數據'事件。

但有時它可以工作。它使用相同的代碼獲取所有1000萬個文檔。

有什麼辦法可以調試嗎?

代碼在這裏:

main.js mongoSync.js

+0

請至少發佈您的代碼或相關部分。 – Shanoor

+0

@ShanShan抱歉,我剛剛添加了它。請檢查一下。 –

+0

我不確定您是否可以在流中調用['.count()'](https://gist.github.com/methuz/a4fa3924617679e56e5b#file-mongosync-js-L48)而不耗盡光標。 – robertklep

回答

0

挖成MongoDB的模塊後,我發現有未記錄的 '錯誤' 的事件。

stream.on('error', function(error) { 
     console.error(error); 
     db.close(); 
}); 

然後我再次運行它,等到錯誤事件發生,然後我發現有一個與網絡連接的問題。添加timeout:false找到功能幫助我在這種情況下。

var stream = col.find(mongoSync.query, mongoSync.projection,{timeout:false}).batchSize(mongoSync.batchSize).stream();