请检查学生和主题的架构
var Schema = mongoose.Schema
var studentSchema = Schema({
name: String,
roll: Number,
subject: [{
type: Schema.Types.ObjectId,
ref: 'subject'
}]
})
var subjectSchema = Schema({
name: String,
marks: Number,
student: [{
type: Schema.Types.ObjectId,
ref: 'student'
}]
})
var studentModel = mongoose.model('student', studentSchema);
var subjectModel = mongoose.model('subject', subjectSchema);
我希望每当我保存一个新的主题时,它的学生领域应该得到学生的ID,相应的学生的主题领域应该得到主题的id。
我写了下面的代码
var subject = new subjectModel({
name: "FCPC",
marks: 79,
})
studentModel.findOne({name:"Yname"}).exec(function(err,stu){
subject.student=stu._id;
subject.save();
studentModel.updateOne({_id:stu._id},{$push:{subject:subject._id}}).exec();
})
它的工作正常,但请告诉我这是正确的方法,有没有更好的方法来实现它
你只需要在Subject
对象中设置Student
。
你可以通过findOne({name:"name"})
获得学生的主题
所以例如student.id="id"
和student.name="name"
所以对于student.subject[i].id
(期望的主题id),我们可以让有这个主题的学生:
studentModel.find({
subjects:{
$elemMatch:student.subject[i].id
}
});
所以你不需要将Student
添加到Subject
Schema
PS:您也不需要两次更新数据