Mongoose Model.remove(回调)不会从我的集合中删除任何内容

时间:2014-07-22 07:36:33

标签: javascript node.js mongodb mongoose

我正在尝试从Mongoose数据库中删除所有内容,但似乎没有任何效果。

我试过了

# CoffeeScript
MyModel.find().remove((err) -> console.log('purge callback'))

# JavaScript
MyModel.find().remove(function() { console.log('purge callback') })

并且

# CoffeeScript
MyModel.find().remove({}, (err) -> console.log('purge callback'))

# JavaScript
MyModel.find().remove({}, function() { console.log('purge callback') })

即使删除.find()步骤或添加.exec()我的回调也从未显示,我的数据仍在此处。

我很确定我的模型和连接没问题:

  • 我可以在Mongo的日志中看到连接
  • 我可以通过在其他地方操纵相同的模型来添加文档

相关:How do I remove documents using Node.js Mongoose?

修改

我的问题是由未显示的语法错误引起的。所选答案确实有效,上述代码也是如此。如果有必要,欢迎主持人删除我的问题。

2 个答案:

答案 0 :(得分:21)

它不是Mongoose返回的"query"对象,这里唯一有效的方法是.remove()

MyModel.remove(function(err,removed) {

   // where removed is the count of removed documents
});

与以下内容相同:

MyModel.remove({}, function(err,removed) {

});

另外,您如何确定没有删除任何文件?可能正在寻找错误的收藏品。默认情况下,Mongoose会将集合名称复数化,除非您明确指定集合名称,如下所示:

mongoose.Model( "MyModel", myModelSchema, "mymodel" )

如果没有第三个参数或以其他方式指定架构,则集合名称隐含为“mymodels”。因此,请检查您是否拥有正确的集合以及您希望删除文档的正确数据库连接。

答案 1 :(得分:13)

函数.remove仅适用于Mongoose文档模型实例。这是删除一个模型的示例:

Model.findOne({ field : 'toto'}, function (err, model) {
    if (err) {
        return;
    }
    model.remove(function (err) {
        // if no error, your model is removed
    });
});

但是,如果你要删除具有特定查询的元素,你应该像remove函数一样使用函数find

Model.remove({ title : 'toto' }, function (err) {
    // if no error, your models are removed
});