Mongoose不从集合中删除对象

时间:2013-03-27 21:40:42

标签: node.js mongodb mongoose

猫鼬表现出一种奇怪的行为。以下代码行首先完全删除一个集合,然后创建一个新对象,最后再次删除该集合。

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

2 个答案:

答案 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'); }); };

然而,它没有清除收藏!它适用于另一个测试用例,这是一个不同的模型,并且有效!有任何想法吗?我可以看到日志