MongoDB执行deleteOne报错:TypeError: deleteOne不是函数问题排查
解决MongoDB执行deleteOne报错的问题
这个报错TypeError: Property 'deleteOne' of object synctup.users is not a function其实很常见,主要有两个大概率的原因,我给你拆解一下:
1. 你用的MongoDB驱动版本太老了
deleteOne()是MongoDB 3.2版本才正式引入的新API,如果你的驱动(不管是Node.js、Python还是其他语言的驱动)版本是2.x或者更早,这个方法根本不存在,自然会报“不是函数”的错。
解决办法:
- 升级驱动:把你的MongoDB驱动升级到3.x及以上版本,之后就能正常使用
deleteOne()了。 - 改用旧版API:如果暂时不想升级,也可以用旧版本的
remove()方法实现同样的效果,只需要加上justOne: true参数,确保只删除第一条匹配的记录:db.users.remove({login:"theUsersName"}, {justOne: true})
2. 集合对象的获取方式不正确
有时候你以为拿到的是集合对象,但实际上可能因为连接代码的问题,得到的是一个不具备deleteOne方法的对象。比如在Node.js的旧驱动里,直接用db.users可能返回的是一个过时的对象,而正确的方式应该是通过db.collection('users')来获取集合。
验证&修复:
检查你的连接代码,确保是通过标准方式获取集合,举个Node.js的例子:
const MongoClient = require('mongodb').MongoClient; MongoClient.connect('mongodb://localhost:27017', function(err, client) { if (err) throw err; const db = client.db('synctup'); // 正确获取集合的方式 const usersCollection = db.collection('users'); usersCollection.deleteOne({login:"theUsersName"}, function(err, result) { if (err) console.error(err); console.log('删除成功'); client.close(); }); });
另外,你也可以先在MongoDB的shell里测试db.users.deleteOne({login:"theUsersName"}),如果shell里能正常执行,那基本可以确定是驱动版本或者代码里集合获取的问题。
内容的提问来源于stack exchange,提问作者cnak2
相关产品推荐
相关产品推荐

