MongoDB调用.save()无报错却未保存记录,求排查问题
问题诊断与解决
嘿,我一眼就发现核心问题了——你的业务代码里完全没有建立MongoDB的连接!Mongoose的所有数据库操作都得等连接成功后才会执行,没连接的话,这些操作只会被挂在队列里,根本不会触发你写的回调函数,这就是为啥你既看不到报错,也看不到成功提示的原因。
下面给你一步步的修复方案:
1. 补上数据库连接逻辑
在业务代码最开头加上Mongoose的连接代码,把下面的连接字符串换成你自己的(本地默认是mongodb://localhost:27017/你的数据库名):
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/your-database-name', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB 连接成功啦')) .catch(err => console.error('MongoDB 连接失败:', err));
2. 顺便优化下代码细节
- 你的Schema里声明了
_id: Schema.Types.ObjectId,其实Mongoose默认会自动生成ObjectId类型的_id,这个声明完全可以省略,不影响功能。 - 注意模块引入路径:你写的
require('/models/myModel')是绝对路径,除非你的models目录在系统根目录,否则建议用相对路径比如./models/myModel(假设你的业务代码在项目根目录)。
3. 修复后的完整业务代码示例
我把代码改成了更易读的async/await风格,比回调函数更清晰:
const mongoose = require('mongoose'); const myModel = require('./models/myModel'); // 先确保连接上数据库,再执行保存操作 mongoose.connect('mongodb://localhost:27017/your-database-name', { useNewUrlParser: true, useUnifiedTopology: true }) .then(async () => { console.log('MongoDB 连接成功'); const myRec = new myModel({ foo: "whatever", bar: "whatever" }); try { const savedDoc = await myRec.save(); console.log("保存成功:", savedDoc); } catch (err) { console.log("出错啦:", err); } // 如果是一次性脚本,保存完可以关闭连接 mongoose.disconnect(); }) .catch(err => console.error('连接数据库时出错:', err));
按照这个改完,你应该就能看到成功提示,数据库里也能查到记录啦!
内容的提问来源于stack exchange,提问作者torbenrudgaard
相关产品推荐
相关产品推荐

