Mongoose Populate Virtuals无效并返回null

时间:2018-05-30 14:02:31

标签: node.js mongodb mongoose

我读到了Mongoose Populate Virtuals,并认为它很酷,与SQL中的连接操作类似。

当我在我的应用上试用它时,它无法正常工作。我的应用程序与此类似,只是简化

我在单独的文件中有一个课堂和教师模式

Classroom.js

...
...
var ClassroomSchema = new Schema({
   class_code:String,
   teacher_id:String
});

ClassroomSchema.virtual('teacher',{
   ref:'Teacher',             //model to reference
   localField:'teacher_id',   //Class.teacher_id
   foreignField:'teacher_id', //a Teacher.teacher_id
   justOne:true
});

module.exports = mongoose.model('Classroom',ClassroomSchema');

Teacher.js

***
***
var TeacherSchema = new Schema({
   name:String,
   teacher_id:String
});

module.exports = mongoose.model('Teacher',TeacherSchema);

app.js

var Classroom = require('Classroom.js');
var Teacher = require('Teacher.js');

//Find classrooms
Classroom.find({}).populate('teacher').exec(function(err,docs){
    if(err) throw err
    if(docs) console.log(docs);
});

然后它将返回教室,但与教师一起回归教室。字段等于 null

我在这里遗漏了什么吗?为什么它会返回null?

2 个答案:

答案 0 :(得分:1)

将toJson和toObject选项添加到Schema中,如下所示:

var ClassroomSchema = new Schema({
   class_code:String,
   teacher_id:String
},
{ toJSON: { virtuals: true }, toObject: { virtuals: true }});

答案 1 :(得分:0)

在5.2.18之后的版本中不起作用。 如果将virtuals设置为true,则仅具有虚拟字段;如果将false设置为false,则具有虚拟填充,而没有字段