我会尝试尽可能简洁 - 猫鼬似乎不保存记录,直到整个脚本结束,即使在保存()部分异步调用:为什么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