Mongoose报错:Model.find()不再支持回调函数,求解决方法
解决Mongoose中Model.find()不再接受回调的错误
错误信息
throw new MongooseError('Model.find() no longer accepts a callback'); ^ MongooseError: Model.find() no longer accepts a callback at Function.find (D:\programming\programs\.vscode\FruitsProject\node_modules\mongoose\lib\model.js:2081:11) at Object.<anonymous> (D:\programming\programs\.vscode\FruitsProject\mongoose.js:37:7) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Module._load (node:internal/modules/cjs/loader:960:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:23:47
Node.js版本:v18.16.1
用户提供的代码(已采用async/await):
const mongoose = require("mongoose"); mongoose.connect("mongodb://127.0.0.1:27017/fruitsDB", { useNewUrlParser: true }); const fruitSchema = new mongoose.Schema({ name: { type: String, required: [true, "Please check your data entry, no name specified!"] }, rating: { type: Number, min: 1, max: 6 }, review: String }); const Fruit = mongoose.model("Fruit", fruitSchema); const personSchema = new mongoose.Schema({ name: String, age: Number }); const Person = mongoose.model("Person", personSchema); async function saveFruitAndPerson() { try { // 创建并保存Fruit文档 const fruit = new Fruit({ name: "Grapes", rating: 6, review: "Grape is a good fruit" }); const savedFruit = await fruit.save(); console.log("Saved fruit:", savedFruit); // 创建并保存Person文档 const person = new Person({ name: "John", age: 37 }); const savedPerson = await person.save(); console.log("Saved person:", savedPerson); // 使用findOne查询Fruit文档 const retrievedFruit = await Fruit.findOne({ name: "Grapes" }); console.log("Retrieved fruit:", retrievedFruit); // 使用findOne查询Person文档 const retrievedPerson = await Person.findOne({ name: "John" }); console.log("Retrieved person:", retrievedPerson); } catch (error) { console.error("Error:", error); } finally { mongoose.connection.close(); // 关闭数据库连接 } } saveFruitAndPerson();
问题分析与解决方法
从错误栈看,问题出在mongoose.js第37行——调用Model.find()时传入了回调函数,但你提供的代码里并没有使用find()方法,只用到了findOne()。这说明当前运行的代码和你贴出的代码不一致,或者存在缓存残留问题。
解决步骤:
- 检查运行文件的实际内容:打开正在运行的
mongoose.js,定位到第37行,确认是否存在类似Fruit.find({}, (err, fruits) => { ... })的代码——这种带回调的写法在Mongoose v7+版本中已被彻底移除。 - 修正find()写法:如果确实存在带回调的
find(),改成async/await形式:// 错误写法 Fruit.find({}, (err, fruits) => { if (err) console.log(err); else console.log(fruits); }); // 正确async/await写法 const fruits = await Fruit.find({}); console.log(fruits); - 清理缓存并重启环境:Node.js可能缓存了旧代码,导致修改后的代码未生效。可以直接重启VS Code或终端,或者删除项目中的
node_modules/.cache目录(如果存在)。 - 确认Mongoose版本:Mongoose v7及以上版本完全移除了对回调的支持,所有查询操作必须使用Promise、async/await或
.then()链式调用。确保项目依赖的Mongoose版本与代码写法匹配。
内容的提问来源于stack exchange,提问作者Arun vel
相关产品推荐
相关产品推荐

