用月球更新M:N

时间:2018-09-09 13:54:31

标签: node.js mongodb express mongoose

我正在寻找正确的方法来与Moongose合并M:N数据库关系。 我有两种模式:

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关系?有没有可能只更新课程模式,moonggose会自动更新用户模式?

0 个答案:

没有答案