2014-10-13 3 views
-1

У меня есть две схемы Student, User - где пользователь может быть классным преподавателем или другими назначенными лицами.Использование elemMatch для запроса вложенного условия в Mongoose

Student Schema

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

Теперь я хочу, чтобы сгруппировать студентов для конкретного владельца. (ClassTeacher)

Я написал сервер апи маршрут -метод для этого.

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

идентификатор пользователя является classTeacherid. = req.queryUserStudentsId

exports.getUserStudents=function(req,res){ 

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

    }; 

В результате всех студентов. Не только те, которые принадлежат данному владельцу.

Пожалуйста, дайте мне знать, где я ошибаюсь.

Спасибо.

+0

find() говорит найти все документы. –

ответ

2

select Используется для выбора полей для включения в возвращенные документы. Вы должны предоставить owner фильтр к самому find фильтровать студенческие документы только тех, кто принадлежит req.queryUserStudentsId:

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

Вы можете опустить .populate('owner') вызов, если вам не нужно для получения полной информации о владельце.

Смежные вопросы