Node.js Get请求仅从mongodb返回嵌套元素的_id,而不是完整元素

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

我正在构建我的第一个mean stack应用程序,在配置所有路由和获取所需数据时遇到问题

我有两个模型

课程:

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阻止了这个错误。。。