Javascript 使用指针查找mongoose对象

Javascript 使用指针查找mongoose对象,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个这样的模型 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 }); 我在课堂上有一个方法,谁的工

我有一个这样的模型

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.\u id
    似乎产生相同的结果?只是糖吗
  • 一般来说,我能依靠这个吗?例如,我可以为指针属性指定对象而不是对象ID吗
  • 谁给我提供了这个好功能(如果是这样的话),是mongo还是mongoose

    • 好吧,我做了一些研究。创建教室和学生集合,如下图所示:

      因此,如果我们这样做,本机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();
          });
      });
      
      它返回一个空数组

      另一方面,如果我这样做:

      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

      所以我想这是猫鼬的魔法,而不是猫鼬

      也不太确定你是否可以依靠这一点


      希望这有帮助。

      知道它不是mongo的一部分很有用。非常感谢。