2016-02-18 3 views
1

У меня есть модель, как это ...Найти мангуст объектов с указателем

var studentSchema = new Schema({ 
    classroomId: Schema.Types.ObjectId, 
    // etc 
}); 

var Student = mongoose.model('Student', studentSchema); 

var classroomSchema = new Schema({ 
    // doesn't matter for this question 
}); 

И у меня есть метод на классе кто есть работа заключается в том, чтобы вернуть студент. Это похоже на работу с двумя различными синтаксисами ...

classroomSchema.methods.students = function() { 
    // this works 
    return Student.find({ classroomId:this._id }); 

    // and this also seems to work? 
    return Student.find({ classroomId:this }); 
} 

Вопросов:

  • Почему this и this._id оба появляются генерировать те же результаты? Это просто синтаксис сахара?
  • Могу ли я полагаться на это в целом? Например, можно ли присвоить объект, а не идентификатор объекта атрибуту указателя?
  • Кто предоставляет мне эту приятную функцию (если это так), это монго или мангуста?

ответ

2

Хорошо, поэтому я провел некоторое исследование по этому вопросу. Дата создания классов и студентов коллекции как некоторые документы, как показано ниже:

enter image description here

Так что, похоже, водитель Native MongoDB не возвращает ничего, если мы делаем что-то вроде этого:

db.collection("classrooms").findOne({_id: 1}, function(err, classroom){ 
    console.log("Got classroom as : " + JSON.stringify(classroom)); 
    db.collection("students").find({classroomId: classroom}).toArray(function(err, students){ 
     if(err) console.log(err); 
     else console.log(students); 

     //Close connection 
     db.close(); 
    }); 
}); 

Это возвращает пустой массив.

С другой стороны, если я что-то вроде этого:

db.collection("classrooms").findOne({_id: 1}, function(err, classroom){ 
    console.log("Got classroom as : " + JSON.stringify(classroom)); 
    db.collection("students").find({classroomId: classroom._id}).toArray(function(err, students){ 
     if(err) console.log(err); 
     else console.log(students); 

     //Close connection 
     db.close(); 
    }); 
}); 

Тогда я получаю массив, содержащий 3 студентов, как в моей коллекции студентов с classroomId: 1

Так что я полагаю, это магия, сделанная мангустом и НЕ mongodb.

Также не совсем уверен, можете ли вы положиться на это в целом.

Надеюсь, это поможет.

+0

Полезно знать, что это не часть монго. Огромное спасибо. – user1272965

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