从ref文档中的数组获取单行?

时间:2018-03-04 16:56:45

标签: node.js mongodb mongoose

我有这个模型(使用mongoose):

var StudentSchema = new mongoose.Schema({
    name: String,
    address: String,
    phones: [{
        name: String,
        address: String
    }]
});

var subjectSchema = new mongoose.Schema({
    name: String,
    students: [{
        type: mongoose.Schema.Types.ObjectId,
        ref:'Student' 
    }]
});

我希望能够在一个主题下获得一个特定的学生详细信息。我试过这个:

router.get('/:id/students/:idstudent', function(req, res, next) {
    Subject.findById(req.params.id)
        .where('students', {
            $elemMatch: {
                $eq: req.params.idstudent 
            }
        })
        .exec(function (err, post) {
            if (err) {
                return next(err);
            }
            res.json(post.students);
        });
});

但即使打印出我正在寻找的学生,也要打印与他同一科目的所有其他学生。我希望能够只从studentId获得详细信息。

1 个答案:

答案 0 :(得分:0)

where需要$elemMatch个查询, 使用select指定$elemMatch投影。

router.get('/:id/students/:idstudent', function(req, res, next) {
    Subject.findById(req.params.id)
     .select({'students': {$elemMatch: {$eq: req.params.idstudent}}}        
     .populate('students')         
     .exec(function (err, post) {
        if (err) return next(err);
        res.json(post.students);
    });
});