2017-03-28 17 views
0

後、私は次のように「コースのドキュメントを削除していているAPIを持っています。のMongoDB:サブ文書の更新配列は、文書の削除

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

もちろん、コースとその依存関係の両方を削除する静的メソッドを使用してクラスメソッドを追加します。

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/ 

最後に上記を使用しますがcourses配列内のIDを格納していると仮定すると、

メソッドの使用:

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"}); 
    } 
}; 
関連する問題