我有这样的模特...

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吗?
谁在向我提供此功能(如果就是这样),是mongo还是mongoose?

最佳答案

好吧,我对此做了一些研究。创建了教室和学生馆藏以及一些文档,如下所示:

javascript - 用指针查找 Mongoose 对象-LMLPHP

如此看来,如果我们执行以下操作,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的魔术。

同样也不太确定您是否一般可以依靠它。

希望这可以帮助。

09-10 08:02
查看更多