在Mongoose中使用elemMatch进行嵌套条件查询

时间:2014-10-13 11:33:47

标签: node.js mongodb mongoose

我有两个模式学生,用户 - 用户可以是班主任或其他指定人员。

学生架构

var StudentSchema = new Schema({
name : String,
.
.
.
owner: {
        type: Schema.ObjectId,
        ref: 'User'
    }
})

现在我想将学生分组为特定的所有者。(classTeacher)

我为此编写了一个服务器api route -method。

get ==> localhost:3000/api/---/user/:userId/students

userId是classTeacherid. = req.queryUserStudentsId

exports.getUserStudents=function(req,res){

     Student
            .find()
            .select({            
                'owner': {
                    $elemMatch: {
                        _id: req.queryUserStudentsId
                    }
                }
            })
            .populate('owner')
    .exec(function(err, students) {

    };

这导致所有学生。不仅属于给定的所有者ID。

请告诉我错误的地方。

感谢。

1 个答案:

答案 0 :(得分:2)

select用于选择要包含在返回文档中的字段。您需要向owner本身提供find过滤器,以便将学生文档过滤为req.queryUserStudentsId所拥有的文档:

 Student.find({owner: req.queryUserStudentsId})
        .populate('owner')
        .exec(function(err, students) {
            ...
        });

如果您不需要所有者的完整详细信息,则可以省略.populate('owner')来电。