我有一个API,我正在删除'当然'文件以下列方式:
module.exports.deleteCourse = function(req, res){
var courseid = req.params.courseid;
if(courseid){
Course.findByIdAndRemove(courseid, function(err, course){
if(err){
sendJSONResponse(res, 404, err);
return;
}
sendJSONResponse(res, 204, null)
});
} else{
sendJSONResponse(res, 404, {"message":"NoId"});
}
};
这在从数据库中删除课程方面是成功的,如尝试通过id找到它时所示。
问题在于用户文档:
var instructorSchema = new mongoose.Schema({
name: {type: String,
unique: true,
required: true},
password: {type: String,
required: true},
courses: [course.schema]
});
如果文档被推送到课程数组,它将在删除方法之后保留。
所以我的问题。是否有一种相对无痛的方法可以在删除后更新此文档?
感谢。
答案 0 :(得分:0)
使用静态添加课程方法,删除课程及其依赖项。
假设您在courses
数组中存储ID:
var Instructor = require('./instructor');
courseSchema.statics = {
removeOneWithDependencies : function(id, done){
this.findByIdAndRemove(id, function(err, course){
if(err){
return done(err);
}
else{
//Removes the course id from courses array of all instructor docs
Instructor.update({courses: course._id}, { $pullAll: {courses: [course._id] } }, {multi: true}, function(err){ //http://stackoverflow.com/a/27917378/
if(err){
return done(err);
}
else{
return done();
}
})
}
});
}
}
如果您要将课程文档存储在courses
数组中,则需要将更新查询更改为:
Instructor.update({"courses._id": course._id}, { $pull: {courses:{_id: course._id} } }, {multi: true}, function(err){ //http://stackoverflow.com/a/15122017/
最后在API中使用上述方法:
module.exports.deleteCourse = function(req, res){
var courseid = req.params.courseid;
if(courseid){
Course.removeOneWithDependencies(courseid, function(err){
if(err){
return sendJSONResponse(res, 500, err);
}
else{
return sendJSONResponse(res, 204, null);
}
});
} else{
sendJSONResponse(res, 404, {"message":"NoId"});
}
};