使用Mongoose操作MongoDB时遇文档存储与返回值异常问题求助
Mongoose 数据库指定错误与函数返回值 undefined 问题解决
问题1:文档被创建到test数据库而非指定的Questions数据库
原因
Mongoose 默认会连接test数据库,若连接配置未明确指定目标数据库,或模型未关联正确的连接实例,就会出现该问题。
解决方案
- 修正连接字符串
确保连接字符串末尾包含目标数据库名称:mongoose.connect('mongodb://localhost:27017/Questions'); - 通过配置参数指定数据库
若连接字符串不含数据库名,可通过dbName参数指定:mongoose.connect('mongodb://localhost:27017/', { dbName: 'Questions', // 其他配置项(如auth等) }); - 关联模型到指定连接实例
若使用多连接实例,需将 Schema 绑定到对应连接的模型,而非默认实例:// 创建指定数据库的连接 const questionDB = mongoose.createConnection('mongodb://localhost:27017/Questions'); // 基于该连接定义模型 const AreaModel = questionDB.model('Area', areaSchema);
问题2:addQuestion函数返回undefined,尽管q.save()有结果
原因
q.save()是异步操作(返回Promise),若函数未正确返回该Promise,调用方会收到默认的undefined。常见错误是在.then()回调内未返回结果,或未使用async/await处理异步逻辑。
解决方案
方式1:使用async/await
async function addQuestion(questionData) { const q = new AreaModel(questionData); // 等待save操作完成,获取结果 const result = await q.save(); console.log('save返回结果:', result); // 返回结果给调用方 return result; }
方式2:链式返回Promise
function addQuestion(questionData) { const q = new AreaModel(questionData); // 直接返回save的Promise链,并在回调中返回结果 return q.save().then(result => { console.log('save返回结果:', result); return result; }); }
调用时的正确姿势
调用方需通过await或.then()接收异步返回值:
// 用await调用(需在async函数内) async function test() { try { const res = await addQuestion({ /* 测试数据 */ }); console.log('调用方收到的结果:', res); } catch (err) { console.error('保存失败:', err); } } // 或用.then()调用 addQuestion({ /* 测试数据 */ }) .then(res => console.log('调用方收到的结果:', res)) .catch(err => console.error('保存失败:', err));
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

