我读到了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?
答案 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,则具有虚拟填充,而没有字段