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 和 Mongoose v3.6.0

4

2 回答 2

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();
    });
});

也可以随意在那里进行一些错误处理。

于 2013-03-27T23:29:47.800 回答
2

我有这段代码在我的测试结束时执行;

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

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

于 2015-01-13T09:52:50.577 回答