Удаление дочернего элемента в поддокументе не работает

Я новичок в Mongoose и не думаю, что мой подход к удалению элемента в поддокументе является правильным.

У меня есть следующая настройка схемы:

//DEPENDENCIES
var mongoose = require('mongoose');


var contactSchema = new mongoose.Schema({
  name:{type:String},
  age:{type:Number}
});

var phoneSchema = new mongoose.Schema({
  number:{ type: String },
  phoneType:{ type: Number }
})

var memberSchema = new mongoose.Schema({

  firstname: {
    type: String
  },
  lastname: {
    type: String
  },
  phone:[phoneSchema],
  contacts:[contactSchema]

  });

//RETURN MODEL

module.exports = mongoose.model('member', memberSchema);

Чтобы удалить элемент с телефона, в моем Express API я сначала нахожу родителя, а затем ссылаюсь на «удалить» для дочернего идентификатора, как здесь. Но это не работает.

router.route('/владелец/:ownerId/телефон/:phoneId')

.delete(function(req, res){
  Member.findOne({_id: req.body.ownerId}, function(err, member){
      member.phone.remove({_id: req.body.phoneId}, function(err){
        if(err)
          res.send(err)
        res.json({message: 'Success! Phone has been removed.'})
    });
  });
});

person cnak2    schedule 16.01.2017    source источник


Ответы (1)


Выяснил, что я искал req.body и на самом деле нуждался в req.params.

Также найден правильный синтаксис в документах Mongoose:

router.route('/owner/:ownerId/phone/:phoneId')

.delete(function(req, res){
  Member.findOne({_id: req.params.ownerId}, function(err, member){

      member.phone.id(req.params.phoneId).remove();

      member.save(function (err) {
        if (err) return handleError(err);
        console.log('the sub-doc was removed');
      });


  });
});
person cnak2    schedule 16.01.2017