2016-02-22 4 views
0

Я пытаюсь удалить элемент через его _id из модели массива в мангусте. Тот же метод работает в другом месте моего кода, но здесь он не удаляет элемент. После нескольких часов попыток сменить различные части, я, наконец, размещаю его здесь, потому что, возможно, моя нехватка сна - главная причина. Может кто-нибудь узнать, что я делаю неправильно?Невозможно удалить элемент из массива в Mongoose

ABC.findOne({ 
    'user': new ObjectId(req.decoded._id), 
    'activity.ride': new ObjectId(id) 
}, { 
    'activity.$': 1 
}, function(err, doc) { 

    if (doc !== null) { 
     for (var j = 0; j < doc.activity.length; j++) { 
      var request = JSON.parse(JSON.stringify(doc.activity[j])); 
      doc.activity.remove(request._id); 
      doc.save(); 
     } 
    } 
}); 

Это модель:

var activityItem = mongoose.Schema({ 
    timestampValue: Number, 
    xabc: String, 
    full: Boolean, 
    comp: Boolean 
}); 

var ABC = mongoose.Schema({ 
    activity: [activityItem], 
    user: { 
     type: mongoose.Schema.ObjectId, 
     ref: 'User' 
    }, 
    username: String 
}); 

ответ

1

Оператор $pull удаляет из существующего массива все экземпляры значения или значения, которые соответствуют заданному условию. И, чтобы удалить элемент из массива через findOneAndUpdate

ABC.findOneAndUpdate({'user': new ObjectId(req.decoded._id)}, 
        {$pull: {activity: {_id: request._id}}}, 
        {new: true}, 
        function(err, a) { 
         if (err) 
          console.log(err); 
         else 
          console.log(a); 
        }); 

BTW, я не нашел ride в activityItem схеме, поэтому я удалить ride из условия запроса.

+0

Привет большое спасибо, но это не работает для меня. – amit

+0

@amit, извините за предыдущую ошибку, я обновил свой ответ, повторите попытку. – zangw