Mongoose Model.remove(callback) 不会从我的收藏中删除任何内容

Posted

技术标签:

【中文标题】Mongoose Model.remove(callback) 不会从我的收藏中删除任何内容【英文标题】:Mongoose Model.remove(callback) doesn't remove anything from my collection 【发布时间】:2014-09-12 22:06:08 【问题描述】:

我正在尝试从我的 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?

编辑

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

【问题讨论】:

【参考方案1】:

它不是 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”。因此,请检查您是否拥有正确的集合以及您希望删除文档的正确数据库连接。

【讨论】:

正如我所说,我也尝试过,但它也不起作用。此外,Mongoose 文档示例不同意您的意见 mongoosejs.com/docs/api.html#query_Query-remove 。无论如何感谢您的帮助。 @AsTeR 它适用于其他所有人。您没有显示如上所示的语法,因此您必须做一些不同的事情。 我说我确实删除了.find() 步骤。但你是对的,说明显而易见的事情很重要。我正在通过 MongoHub 和命令行客户端查看我的收藏。我注意到添加的“s”技巧...... 天哪……这件事被包裹在许多回调中,我没有收到消息,但我在上面的行中有一个语法错误。【参考方案2】:

.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
);

【讨论】:

如果找不到模型节点会抛出错误并崩溃

以上是关于Mongoose Model.remove(callback) 不会从我的收藏中删除任何内容的主要内容,如果未能解决你的问题,请参考以下文章

forEach 循环中的异步 findOne() 操作

为啥“cal”命令的输出没有突出显示日期?

Linux命令之日历cal

cal命令

显示日历cal

Linux基本常用命令之ls详解(含date,cal)