mongoose.js中的多对多关系

问题描述 投票:0回答:1

请检查学生和主题的架构

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();
})

它的工作正常,但请告诉我这是正确的方法,有没有更好的方法来实现它

node.js database mongodb mongoose many-to-many
1个回答
0
投票

你只需要在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:您也不需要两次更新数据

© www.soinside.com 2019 - 2024. All rights reserved.