获取请求只返回嵌套元素的_id而不是mongodb中的完整元素

时间:2016-02-23 16:30:20

标签: node.js mean

我正在构建我的第一个平均堆栈应用程序,并且无法配置所有路由并获取我想要的数据。

我有两个型号。

课程:

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{course.id})的评论时,我只会回来[]但是当我使用curl来获取所有课程时,(localhost:3000/courses/{course.id}/reviews)我会收回所有课程我有的课程:"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'作为我的模型的名称在引用它时,而不是'评论' (注意R / r)当我在ref中有一个s时,我没有在那一点上提出错误......不知道为什么。

1 个答案:

答案 0 :(得分:0)

您需要更改以下路线以包含填充功能:

Router.get('/courses', function(req, res, next) {
    Course.find().populate('reviews').exec(function(err, courses){
        if(err){ return next(err); }

        res.json(courses);
    });
});

写在手机上,对任何拼写错误道歉!