我有这样的模特...
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吗?
谁在向我提供此功能(如果就是这样),是mongo还是mongoose?
最佳答案
好吧,我对此做了一些研究。创建了教室和学生馆藏以及一些文档,如下所示:
如此看来,如果我们执行以下操作,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个学生的数组,就像我的student集合中的教室ID是1一样
所以我想这是猫鼬而不是mongodb的魔术。
同样也不太确定您是否一般可以依靠它。
希望这可以帮助。