Отношения многие ко многим в mongoose.js - PullRequest
0 голосов
/ 17 сентября 2018

проверьте схему Студент и Тема

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

Я хочу, чтобы при сохранении нового предмета его поле студента получало идентификатор студента, а поле предмета соответствующего студента - идентификатор предмета.

Я написал следующий код

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

Он работает нормально, но, пожалуйста, скажите мне, это правильный подход и есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 17 сентября 2018

Вам просто нужно установить Subject в Student Object.

Вы можете получить предмет ученика по findOne({name:"name"})

Так, например, с помощью student.id="id" и student.name="name", поэтому для student.subject[i].id (желаемый идентификатор предмета) мы можем получить студентов, у которых есть эти предметы с:

studentModel.find({

    subjects:{

        $elemMatch:student.subject[i].id

    }

});

Так что вам не нужно добавлять Student к Subject Схема

PS: вам также не нужно обновлять данные дважды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...