Mongoose Model.remove(callback)不会从我的集合中删除任何东西

Mongoose Model.remove(callback) doesn't remove anything from my collection

本文关键字:集合 我的 删除 任何东 remove Model callback Mongoose      更新时间:2023-09-26

我试图从我的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(),我的回调也不会显示,我的数据仍然在这里。

我很确定我的模型和连接是ok的:

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

相关:我如何使用Node.js猫鼬删除文档?

编辑

我的问题是由没有显示的语法错误引起的。选择的答案有效,上面的代码也有效。如果有必要,欢迎版主删除我的问题。

这不是由Mongoose返回的"查询"对象,这里唯一有效的方法是.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"。因此,请检查您有正确的集合以及期望删除文档的正确数据库连接。

.remove函数只对Mongoose文档模型实例有效。下面是删除一个模型的示例:

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

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

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