赞
踩
因为我安装的这个版本的MongoDB默认存储的id是一个ObjectId类型,如果只把body传过来的字符串id传给数据库是不行的,控制台会报错,而且会卡死,不重启其他的请求也GG,真可恨啊,足足调了将近一个小时,我哭死,必须必须必须进行类型转换。
可以去compass里面验证一下,_id的类型
下面是基于node环境下使用mongoose进行批量删除的例子
在Mongoose中,如果你想根据一个ID数组删除多个文档,你可以使用`deleteMany()`方法配合`_id`和`$in`操作符。下面是一个示例代码片段,展示了如何实现这一操作:
- const mongoose = require('mongoose');
- const ObjectId = mongoose.Types.ObjectId;
-
- // 假设你有一个名为MyModel的模型
- const MyModel = mongoose.model('MyModel');
-
- // 这是一个包含你要删除的文档_id的数组
- const idsToDelete = ['6439abc1234567890abcdef0', '6439abc1234567890abcdef1'];
-
- // 将字符串ID转换为ObjectId,因为Mongoose需要ObjectId类型
- const objectIds = idsToDelete.map(id => new ObjectId(id));
-
- // 使用$in操作符匹配_id在数组中的所有文档并删除它们
- MyModel.deleteMany({_id: {$in: objectIds}})
- .then(result => {
- console.log(`成功删除了${result.deletedCount}个文档`);
- })
- .catch(err => {
- console.error('删除文档时出错:', err);
- });
首先导入mongoose模块,并获取ObjectId构造函数,用于将字符串id转换为MongoDB能够识别的ObjectId类型。然后,定义一个包含待删除文档id的数组,并使用map函数将每个id转换成ObjectId对象。最后,调用`MyModel.deleteMany()`方法,传入一个查询条件对象,其中 _id 字段使用 $in 操作符匹配数组中的任何一个id,从而实现根据id数组删除多个文档的目的。
但是其实使用mongoose的话,你如果只删除一个,就是不批量删除,可以不用进行类型转换,系统默认转换,这也是大多数教程里的删除的做法,使用的是deleteOne这个api。
不得不再提一嘴,现在deleteMany不接受给第二个参数,之前好多教程里面都在第二个参数传入一个回调,现在新版的mongoose不行了,现在只需要.then就行了,这个点也卡了我不少时间,望周知。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。