Mongoose操作fruits.insertOne()缓冲超时问题求助
解决MongooseError: Operation
fruits.insertOne() buffering timed out after 10000ms错误 这个错误的核心原因是Mongoose尚未完成数据库连接就执行了数据写入操作,导致操作被缓冲后超时。以下是具体的解决步骤:
1. 确认MongoDB本地服务正在运行
如果本地MongoDB服务未启动,Mongoose无法建立连接,直接导致后续操作超时:
- Windows:打开服务管理器,找到
MongoDB服务并启动;或在命令行执行net start MongoDB - macOS/Linux:通过
brew services start mongodb-community(Homebrew)或systemctl start mongod(系统服务)启动服务
2. 等待连接成功后再执行数据操作
原代码中mongoose.connect是异步操作,直接调用fruit.save()时连接还未建立。需要通过异步语法确保连接完成后再执行操作:
方案一:使用async/await(推荐)
const mongoose = require("mongoose"); mongoose.set('strictQuery', false); async function run() { try { // 等待连接成功 await mongoose.connect("mongodb://localhost:27017/fruitsDB", { useNewUrlParser: true, useUnifiedTopology: true // 新增该参数,适配新版MongoDB驱动 }); console.log("数据库连接成功"); const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model("Fruit", fruitSchema); const fruit = new Fruit({ name: "Apple", rating: 7, review: "Pretty good" }); // 等待数据保存完成 await fruit.save(); console.log("数据已成功保存"); // 操作完成后关闭连接 await mongoose.connection.close(); } catch (err) { console.error("操作失败:", err); } } run();
方案二:使用Promise的then/catch
const mongoose = require("mongoose"); mongoose.set('strictQuery', false); mongoose.connect("mongodb://localhost:27017/fruitsDB", { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => { console.log("数据库连接成功"); const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model("Fruit", fruitSchema); const fruit = new Fruit({name: "Apple", rating: 7, review: "Pretty good"}); return fruit.save(); }) .then(() => { console.log("数据保存成功"); return mongoose.connection.close(); }) .catch(err => console.error("操作失败:", err));
3. 检查连接参数适配
Node.js v18搭配的MongoDB驱动版本较高,建议在连接配置中添加useUnifiedTopology: true,确保连接逻辑适配新版驱动的拓扑管理机制。
内容的提问来源于stack exchange,提问作者Aman Sharma
相关产品推荐
相关产品推荐

