用指针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 }); }
问题:
- 为什么
this
和this._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。
也不太确定,如果你可以依靠这一般。
希望这可以帮助。