(collection.remove已被弃用,请使用deleteOne、deleteMany或bulkWrite代替)

6

我正在开发一个REST API的后端,它使用MongoDB作为数据库。我正在使用MongoDB 5.3.3版本。

在API请求时,我想删除一个项目集合,但是收到了如上所示的错误信息:

DeprecationWarning: collection.remove已被弃用,请使用deleteOne、deleteMany或bulkWrite

如何完全删除这个集合?


1
错误很明显,只需使用其中一种方法,而不是remove()。 - vitomadio
你可能收到负评的原因是在StackOverflow上,人们希望你表明你已经尝试了什么,以及它为什么不起作用,这样我们才能更好地了解你想要实现的目标。我猜你可能无法成功使用deleteOne、deleteMany或bulkWrite,或者你可能没有理解它们?无论如何,你应该更详细地解释一下你想要实现什么,你已经尝试了什么,以及为什么你认为它们不起作用。 - Zargold
"(node:15893)" 是什么意思? - Peter Mortensen
4个回答

21

不要使用:Model.remove({});,而应该使用: Model.deleteMany({});


如果使用mongoshell,可以使用:db.<collectionname>.deleteMany({})。它会返回类似这样的内容:{ acknowledged: true, deletedCount: 24 }。删除计数可能会有所不同。在我的情况下是24。 - jnsnsml

1
当我想要删除特定集合时,对我有用的方法是:
mongoose.connection.dropCollection(specificCollection.name)
// or you could use the collection's name exactly such as 'user'

mongoose.connection.dropCollection() 方法需要一个集合的确切名称,这个名称可能在你定义模式时已经定义好了。

很可能,在你的代码中某个地方定义了具体的模型,例如:

mongoose.model('User', UserSchema)

请注意,它不区分大小写,'User''user' 是一样的。

1
在他们的问题中写道:“我想删除一组项目”,如果他们说要删除一组集合,那就意味着他们确实想要删除整个集合。此外,他们使用了复数“items”,这表明不止一个项目,而不是单个文档,而是许多文档。你为什么会有相反的印象? - Zargold

0

这个问题出现在新版本的Mongoose中。如果你想使用Model.remove()方法,你应该将当前的Mongoose版本更改为"mongoose": "^5.10.14"或更低版本。在Deprecation Warnings中阅读更多信息。


0
使用deleteOne或deleteMany进行相应的删除操作。 我已经在从mongodb集合中的删除API中使用了deleteOne()而不是remove()函数来删除项目。这对我起作用了。
app.delete('/todo/:item', function(req, res){   
  Todo.find({item: req.params.item.replace(/\-/g, " ")}).deleteOne(function(err, data){
    if(err) throw err;
      res.json(data);   
  }); 
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接