Обновление M: N с помощью moongose - PullRequest
0 голосов
/ 09 сентября 2018

Я ищу правильный способ улучшить связь с базой данных 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 ​​автоматически обновит схему пользователя?

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