Node.js Get请求仅从mongodb返回嵌套元素的_id,而不是完整元素
我正在构建我的第一个mean stack应用程序,在配置所有路由和获取所需数据时遇到问题 我有两个模型 课程:Node.js Get请求仅从mongodb返回嵌套元素的_id,而不是完整元素,node.js,mean,Node.js,Mean,我正在构建我的第一个mean stack应用程序,在配置所有路由和获取所需数据时遇到问题 我有两个模型 课程: var CourseSchema = new mongoose.Schema({ code: String, name: String, courseContentGrade: Number, courseTeachingGrade: Number, courseAverage: Number, reviews: [{ type: mon
var CourseSchema = new mongoose.Schema({
code: String,
name: String,
courseContentGrade: Number,
courseTeachingGrade: Number,
courseAverage: Number,
reviews: [{ type: mongoose.Schema.Types.ObjectId, refs: 'review'}]
});
和审查:
var ReviewSchema = new mongoose.Schema({
contentReview: String,
teachingReview: String,
contentGrade: Number,
teachingGrade: Number,
average: Number,
professor: String,
trimester: {
type: String,
enum: ['T1', 'T2', 'T3']
},
day: {
type: String,
enum: ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']
},
time: {
type: String,
enum: ['9h-12h', '13h15-16h15', '16h30-19h30']
},
round: {
type: String,
enum: ['1', '2', '3']
},
bet: Number,
year: Number,
upvotes: {type: Number, default: 0},
author: String,
course: { type: mongoose.Schema.Types.ObjectId, ref:'Course'}
});
我已经设置了路线,以便能够获得所有课程和特定课程的所有评论。当我使用curl获取特定课程的复习(localhost:3000/courses{courses.id}
)时,我只返回[],但当我使用curl获取所有课程时,(localhost:3000/courses/{courses.id}/reviews
)我获取所有课程和我拥有的每门课程:“复习”:[“review.id”,“review2.id”]
。当我卷曲一个特定的回顾(localhost:3000/reviews/{review.id}
)时,我得到了回顾对象
到目前为止,我已经配置了这些路由:
router.get('/courses', function(req, res, next) {
Course.find(function(err, courses){
if(err){ return next(err); }
res.json(courses);
});
});
router.get('/reviews/:review', function (req, res) {
res.json(req.review);
});
router.get('/courses/:course', function (req, res) {
res.json(req.course);
});
router.get('/courses/:course/reviews', function (req, res){
res.json(req.course.reviews);
});
我使用这些参数:
router.param('review', function (req, res, next, id) {
var query = Review.findById(id);
query.exec(function (err, review){
if(err) { return next(err);}
if(!review) {return next(new Error('can\'t find review'));}
req.review = review;
return next();
});
});
router.param('course', function (req, res, next, id) {
var query = Course.findById(id).populate('reviews');
query.exec(function (err, course){
if(err) { return next(err);}
if(!course) {return next(new Error('can\'t find course'));}
req.course = course;
return next();
});
});
编辑:
这个问题的解决方案是填充函数(见下文),除此之外,我在课程中引用模型时使用了“review”作为模型的名称,而不是“review”(注意R/R),并且在课程中使用了s at ref,我没有在这一点上提出错误……不知道为什么。您需要更改以下路径以包含填充函数:
Router.get('/courses', function(req, res, next) {
Course.find().populate('reviews').exec(function(err, courses){
if(err){ return next(err); }
res.json(courses);
});
});
写在手机上,所以为任何打字错误道歉 嗨,谢谢你(再次)抽出时间。当我使用该解决方案时,它不能解决我的问题,当我只使用/courses路径时,复习的id从课程中消失。我将研究这个填充函数,这对我来说已经是一个问题。我不明白,我研究了其他项目的代码,他们都成功地使用了填充。我注意到我的项目和其他项目之间的区别是模式定义:我有:
var CourseSchema=new mongoose.schema({code:String,name:String,courseContentGrade:Number,courseTechGrade:Number,courseAverage:Number,reviews:[{type:mongoose.schema.Types.ObjectId,refs:'review'}]})代码>而它们在ref
处没有s。但是当我把它脱下来的时候,我得到了一个难以置信的错误。我将复习模型命名为“复习”,但在我的课程模式中引用了“复习”。当使用s at ref时,我没有问题,当我没有使用它时,我有一个错误,并且没有在评审时注意到de R/R。我不知道为什么s阻止了这个错误。。。