用指针findmongoose对象

我有这样的模型…

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 }); } 

问题:

  • 为什么thisthis._id都会产生相同的结果? 这只是语法糖吗?
  • 我可以依靠这一般吗? 像,我可以分配一个对象,而不是一个对象的ID指针属性?
  • 谁给我提供了这个不错的function(如果是这样的话),是mongo还是mongoose?

好的,所以我对此做了一些研究。 创build教室和学生馆藏,如下所示:

在这里输入图像说明

所以看起来,如果我们这样做,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名学生的数组,其中包含我的学生集合中的教室ID:1

所以我想这是mongoose做的魔法,而不是mongodb。

也不太确定,如果你可以依靠这一般。

希望这可以帮助。