Mongoose v7调用.remove()报错,如何修复产品与用户删除功能?
修复Mongoose v7中
product.remove is not a function报错 Mongoose从v6版本开始废弃了文档实例的remove()方法,v7版本直接移除了该API,而你参考的教程使用的v5.10.2仍支持该方法,这就是报错的原因。以下是两种可行的修复方案:
方案1:使用findByIdAndDelete静态方法(推荐)
该方法直接通过模型调用,无需先查询文档再删除,减少一次数据库请求,性能更优。
修改后的产品删除代码
const deleteProduct = asyncHandler(async (req, res) => { const deletedProduct = await Product.findByIdAndDelete(req.params.id) if (deletedProduct) { res.json({ message: 'Product removed' }) } else { res.status(404) throw new Error('Product not found') } })
修改后的用户删除代码
const deleteUser = asyncHandler(async (req, res) => { const deletedUser = await User.findByIdAndDelete(req.params.id); if (deletedUser) { res.json({ message: 'User removed' }); } else { res.status(404); throw new Error('User not found'); } });
方案2:替换remove()为deleteOne()文档方法
如果需要保留先查询文档的逻辑,可以将文档实例的remove()替换为deleteOne()方法。
修改后的产品删除代码
const deleteProduct = asyncHandler(async (req, res) => { const product = await Product.findById(req.params.id) if (product) { await product.deleteOne() res.json({ message: 'Product removed' }) } else { res.status(404) throw new Error('Product not found') } })
修改后的用户删除代码
const deleteUser = asyncHandler(async (req, res) => { const user = await User.findById(req.params.id); if (user) { await user.deleteOne(); res.json({ message: 'User removed' }); } else { res.status(404); throw new Error('User not found'); } });
内容的提问来源于stack exchange,提问作者Nirav Parekh
相关产品推荐
相关产品推荐

