2016-10-20 2 views
0

Я пытаюсь установить кнопку удаления, где урок можно удалить из класса. Использование $ pull, похоже, просто устанавливает lesson_id в null. Есть ли способ полностью удалить этот элемент?

var classSchema = new Schema({ 
    title: { type: String, required: true }, 
    lessons: [{ 
     _id: false, 
     lesson_id: {type: mongoose.Schema.Types.ObjectId, ref: 'Lesson'} 
    }] 
}); 

module.exports.deleteLesson = function(class_id, lesson_id, callback){ 
    Class.update(
     {'_id': class_id}, 
     { $pull: {lessons: {'lesson_id.$._id': lesson_id}}}, 
     callback 
    ) 
} 

Например

{ _id: 5808, 
    title: 'cd', 
    __v: 0, 
    lessons: [ { lesson_id: [Object] }, { lesson_id: [Object] } ] } 

становится

{ _id: 5808, 
    title: 'cd', 
    __v: 0, 
    lessons: [ { lesson_id: null }, { lesson_id: [Object] } ] } 
+0

Может быть, это может помочь http://stackoverflow.com/a/20275454/2931650 – Roshan

+0

я не думаю, что $ является правильным оператором в этом случае вместо pullAll следует использовать таким образом, что если вы используете {$ pull: {lessons: {'lesson_id._id': lesson_id}}} или на догадку {$ pull: {уроки: {'lesson_id': lesson_id}}}? –

ответ

0

Если вам нужно удалить элемент из уроков (который является массивом), то вам нужно просто выполнить удаление элемента из массива и затем выполнить операцию сохранения. Я написал код, демонстрирующий аналогичный подход.

Class.findOne({ _id: class_id }, function(err, cls) { 

      # Delete the element (for example, using underscore) 
      cls.lessons = _.without(cls.lessons, class_id); 

       cls.save(function (err) {  
         callback(err); 
      }); 
    }); 
Смежные вопросы