如何填充MongoDB嵌套Schema?代码无报错却返回空结果
解决Mongoose填充GameSchema中AdditionalDetails字段为空的问题
问题核心
你的填充代码仅处理了Team1字段的填充,未覆盖Team2,同时异步错误捕获逻辑存在漏洞,还需排查数据层面的引用有效性。
修正后的填充代码
方法1:回调函数写法(修正多字段填充)
Games.find() .populate({ path: 'AdditionalDetails', // 同时填充数组元素内的Team1和Team2字段 populate: [ { path: 'Team1', model: 'SportsTeam' }, { path: 'Team2', model: 'SportsTeam' } ] }) .exec((err, result) => { if (err) { console.error(err); errorlogger(err, `Ag Fetch Schedule ${req.username}`); return res.status(500).send('Unable to process Request'); } console.log(result); res.send(result); });
方法2:async/await写法(更清晰的错误捕获)
try { const result = await Games.find() .populate({ path: 'AdditionalDetails', populate: [ { path: 'Team1', model: 'SportsTeam' }, { path: 'Team2', model: 'SportsTeam' } ] }); console.log(result); res.send(result); } catch (error) { errorlogger(error, `Ag Fetch Schedule ${req.username}`); res.status(500).send('Unable to process Request'); }
关键排查点
- 验证引用ID有效性:检查MongoDB中
Game文档的AdditionalDetails数组内,Team1和Team2是否存储了有效的SportsTeam集合ObjectId,而非空值或无效ID。 - 确认模型注册一致性:确保
SportsTeam模型注册时的名称与GameSchema中ref字段的值完全一致(即mongoose.model('SportsTeam', SportsTeamSchema))。 - 检查关联文档存在性:确认
SportsTeam集合中存在与Game文档引用ID对应的记录。
内容的提问来源于stack exchange,提问作者Deelan Valderama
相关产品推荐
相关产品推荐

