Node.js中使用Mongoose的.find()方法出现异常报错求助
问题原因
这个报错由两个常见原因触发:
- Mongoose版本和配套的MongoDB Node.js驱动版本不匹配,高版本的MongoDB驱动修改了
find方法的传参规则,和当前使用的Mongoose版本不兼容 find方法传参错误,Mongoose的find方法要求第一个参数为查询过滤对象,查询全量数据需要显式传入空对象{},你的代码直接将回调作为第一个参数传入,不符合方法传参要求
解决方案
第一步:修正find方法传参
将你最后一段查询代码修改为如下写法,补全第一个空查询条件参数:
Album.find({}, function (err, albums){ if (err) { console.log(err); } else { console.log(albums); } });
第二步:修复版本不兼容问题
卸载当前已安装的mongoose和mongodb依赖,安装适配的稳定版本:
npm uninstall mongoose mongodb npm install mongoose@6
Mongoose 6.x版本自带适配的MongoDB驱动,无需额外单独安装mongodb包,可避免版本冲突问题。
可选优化:等待数据库连接成功后再执行查询
避免数据库连接未完成就发起查询导致的偶发报错,修改数据库连接逻辑如下:
mongoose.connect('mongodb://localhost:27017/albumDB', {useNewUrlParser: true, useUnifiedTopology: true}) .then(() => { // 连接成功后再执行查询 Album.find({}, function (err, albums){ if (err) return console.log(err); console.log(albums); }); }) .catch(err => console.log('数据库连接失败:', err));
内容的提问来源于stack exchange,提问作者Daf
相关产品推荐
相关产品推荐

