Я ищу правильный способ улучшить связь с базой данных M: N с помощью moongose.
У меня есть две схемы, а именно:
const courseSchema = new Schema({
name: {
type: String,
required: [true, 'Name is required'],
unique: true,
},
startDate: {
type: Date,
required: [true, 'Start date is required']
},
endDate: {
type: Date,
required: [true, 'End date is required']
},
key: {
type: String,
required: [true, 'Key is required'],
},
partsCount: {
type: Number,
required: [true, 'Parts quantity is required'],
min: 2
},
lessonTime: {
type: String,
required: [true, 'Lesson time is required']
},
breakTime: {
type: String,
required: [true, 'Break time is required']
},
users: [{
type: Schema.Types.ObjectId,
ref: 'user'
}],
instructors: [{
type: Schema.Types.ObjectId,
ref: 'user'
}],
author: {
type: Schema.Types.ObjectId,
ref: 'user'
},
code: {
type: String,
}
});
и
const UserSchema = new Schema({
firstName: {
type: String,
required: [true, 'Name field is required']
},
lastName: {
type: String
},
email: {
type: String,
unique: [true, 'User with this email already exists'],
default: false
},
password: {
type: String,
select: false
},
role: {
type: String,
enum: ['admin', 'user', 'teacher'],
default: 'user',
required: true
},
active: {
type: Boolean,
default: false
},
courses: [{
type: Schema.Types.ObjectId,
ref: 'course'
}],
__v: {
type: Number,
select: false
}
}, {
timestamps: {
createdAt: 'created_at',
updatedAt: 'updated_at'
}
});
Затем я обновляю обе схемы, вот так:
router.put('/:id/users', (req, res ,next) => {
console.log('Updating course')
let selectedCourse;
Course.findById(req.params.id)
.then(course => {
course.users.push(req.body.userId);
return course.save()
})
.then(course => {
selectedCourse = course
return User.findById(req.body.userId)
})
.then(user => {
user.courses.push(req.param.id);
return user.save();
})
.then(() => {
res.send(selectedCourse);
})
.catch(err => res.status(500))
});
Есть ли какой-нибудь лучший подход для обновления отношения M: N в moongose? Есть ли возможность обновить только схему курса, и moongose автоматически обновит схему пользователя?