猫鼬表现出一种奇怪的行为。以下代码行首先完全删除一个集合,然后创建一个新对象,最后再次删除该集合。
Model.remove().exec();
var obj = new Model({ name: 'my object' });
obj.save();
Model.remove().exec();
当第一次删除工作时(每次启动程序时,集合都被清空),第二次删除没有效果(当我查询集合时,对象仍然存在)。我无法理解这里发生了什么。
环境:Node.js v0.8.20,MongoDB v1.2.14和Mongoose v3.6.0
答案 0 :(得分:5)
您需要使用回调来获取串行操作。 node.js中的所有I / O都是异步的。这意味着您的.save()
可能比.remove().exec()
慢,所以第二个.remove().exec()
完成,然后保存。您需要使用回调函数来进行正确的流量控制。深度嵌套的回调(AKA回调地狱)方式看起来像这样,但使用更多命名函数或像async.js这样的流控制库将解决这个问题。
Model.remove().exec(function (error) {
var obj = new Model({ name: 'my object' });
obj.save(function (error) {
Model.remove().exec();
});
});
也可以随意处理错误处理。
答案 1 :(得分:2)
我有这段代码,它在我的测试结束时执行;
var clearDb = function (){
// Reset collections
ProjectModel.remove().exec()
.then(function() {
console.log('Removed collection: Project');
});
};