2013-03-27 109 views
0

猫鼬会显示一种奇怪的行为。以下几行代码首先完全删除一个集合,然后创建一个新对象,最后再次删除集合。猫鼬不会从收藏品中移除物品

Model.remove().exec(); 
var obj = new Model({ name: 'my object' }); 
obj.save(); 
Model.remove().exec(); 

虽然第一删除作品(我每次启动程序时,收集被清空),第二个有没有效果(当我查询集合,对象是仍然存在)。我不知道这里发生了什么。

环境:Node.js的v0.8.20,MongoDB的v1.2.14和猫鼬V3.6.0

回答

5

你需要使用回调获取串行操作。 node.js中的所有I/O都是异步的。这意味着可能是你的.save().remove().exec()所以第二.remove().exec()完成后,将保存发生较慢。您需要使用回调函数来进行适当的流量控制。深度嵌套的回调(AKA回调hell)方式看起来像这样,但使用更多的命名函数或像async.js这样的流控制库将解决此问题。

Model.remove().exec(function (error) { 
    var obj = new Model({ name: 'my object' }); 
    obj.save(function (error) { 
     Model.remove().exec(); 
    }); 
}); 

随意抛出一些错误处理。

2

我有这样一段代码,其确实在我的测试结束时被执行;

var clearDb = function(){ // Reset collections ProjectModel.remove().exec() .then(function() { console.log('Removed collection: Project'); }); };

然而,它不清除集合!它适用于另一种测试用例,它是一种不同的模型,并且可行!有任何想法吗?我可以看到日志