MongoDB插入文档未入库及回调函数调用问题求助
解决Mongoose插入文档不显示及回调函数调用问题
你写的代码逻辑本身没问题,但有两个关键问题导致文档没存入数据库:数据库连接状态未确认,以及函数调用方式错误。
你的代码
let mongoose = require('mongoose'); mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }); let personSchema = new mongoose.Schema({ name: { type: String, required: true }, age: Number, favoriteFoods: [String] }) // 定义Person的Schema let Person = mongoose.model('Person', personSchema) // 创建Person模型 const createAndSavePerson = (done) => { var rickSanchez = new Person({ name: 'Rick', age: 22, favoriteFoods: ['Ice Cream', 'Nasi Kebuli'] }) // 基于模型创建文档实例 rickSanchez.save(function(err, data) { // 保存文档 if (err) return console.error(err) done(null, data); // 将结果传递给回调函数 }) };
修复步骤
- 确认数据库连接成功
Mongoose的连接是异步操作,可能你执行保存时连接还未建立。给connect添加状态监听,确保连接完成后再操作:
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('数据库连接成功')) .catch(err => console.error('连接失败:', err));
这样能直观看到连接状态,避免无连接时的保存操作静默失败。
- 正确调用
createAndSavePerson函数
函数要求传入一个回调函数作为done参数,不能直接传done()(这是执行函数的结果,不是函数本身)。正确调用方式:
createAndSavePerson((err, savedData) => { if (err) { console.error('保存失败:', err); } else { console.log('文档已保存:', savedData); // 测试完成后可关闭连接 mongoose.connection.close(); } });
这个回调函数会在rickSanchez.save完成后执行,处理成功或失败的情况。
- 可选:改用async/await简化代码
如果觉得回调写法繁琐,可以换成async/await,逻辑更清晰:
const createAndSavePerson = async (done) => { try { const rickSanchez = new Person({ name: 'Rick', age: 22, favoriteFoods: ['Ice Cream', 'Nasi Kebuli'] }); const savedData = await rickSanchez.save(); done(null, savedData); } catch (err) { done(err); } };
做完这些修改后,重新运行代码,就能在MongoDB Compass中看到存入的Rick文档了。
内容的提问来源于stack exchange,提问作者Rickyslash
相关产品推荐
相关产品推荐

