我會嘗試儘可能簡潔 - 貓鼬似乎不保存記錄,直到整個腳本結束,即使在保存()部分異步調用:爲什麼Mongoose不能在腳本執行時保存記錄?
var reallyBigData = require('./data.json');
var importData = function(data) {
var newObj = new Obj; // Mongoose Object
newObj.x = data.x;
newObj.save();
};
this.on('importData', importData);
for(var i in reallyBigData) {
this.emit('importData', reallyBigData[i]);
};
這是一個粗略的簡化,但你明白了。當我運行腳本並查詢Mongo時,腳本運行時沒有看到任何記錄。如果我將數字限制爲30,並將其導入快速結束,然後我會看到記錄。
爲什麼Mongoose不在腳本執行時保存每條記錄?
有趣的是,我通過扔掉貓鼬並使用本地驅動程序解決了這個問題。我想知道Mongoose是否執行某種查詢緩存。我會更多地嘗試它,但似乎Mongoose在大循環結束之前沒有處理任何插入請求。 – James 2013-03-11 17:05:48
@James是的,Mongoose會排隊查詢,以便您可以*同步調用它們並讓它們異步運行。這是「* callback hell *」的一種可能的解決方案。此外,本地驅動程序仍然是異步的,你仍然應該使用'insert()'和一個異步迭代器進行回調。 – 2013-03-11 17:20:16