Mongoose查询时DBRef关联字段未显示问题求助
问题原因与解决方案
1. 查询条件写法错误
你现在用的'student.$id': req.user._id写法不对,没法正确匹配student数组中包含用户ID的文档:
- 如果
req.user._id是字符串类型(和你Schema里student的String类型匹配),正确的查询条件应该直接写:const session = await Session.find({ student: req.user._id }); - 如果
req.user._id是ObjectId类型,那你Schema里student的类型得改成mongoose.Schema.Types.ObjectId,不然类型不匹配会查不到对应数据:student: [ { type: mongoose.Schema.Types.ObjectId, ref: 'USERS', }, ],
2. 未调用populate()拉取关联数据
你的Schema里student、subject、classroom都设了ref关联其他集合,但Mongoose的find()默认只会返回存在库里的引用ID,不会自动去关联集合查询完整数据。要拿到这些字段的完整内容,必须调用populate()方法:
const session = await Session.find({ student: req.user._id }) .populate('student') // 填充USERS集合的关联数据 .populate('subject') // 填充SUBJECTS集合的关联数据 .populate('classroom'); // 填充CLASSROOM集合的关联数据
3. 额外修正点
你现在代码里的if (session)判断永远为真,因为find()返回的是空数组而不是null,正确的判断应该检查数组长度:
if (session.length > 0) { res.status(200).json({ session }); } else { res.status(404); throw new Error('User not found'); }
修改后的完整代码
const asyncHandler = require('express-async-handler'); const Session = require('../models/sessionModel'); const listSession = asyncHandler(async (req, res) => { // 修正查询条件并填充关联数据 const session = await Session.find({ student: req.user._id }) .populate('student') .populate('subject') .populate('classroom'); if (session.length > 0) { res.status(200).json({ session }); } else { res.status(404); throw new Error('User not found'); } }); module.exports = { listSession };
内容的提问来源于stack exchange,提问作者Adhi Astika
相关产品推荐
相关产品推荐

