【问题标题】:Removing a child element in subdocument not working删除子文档中的子元素不起作用
【发布时间】:2017-05-31 15:59:11
【问题描述】:

我是 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 中,我首先找到父项,然后引用子 ID 的“删除”,如下所示。但它不起作用。

router.route('/owner/:ownerId/phone/: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.'})
    });
  });
});

【问题讨论】:

    标签: node.js express mongoose mongoose-schema


    【解决方案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');
          });
    
    
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2017-06-08
      • 2017-05-10
      • 1970-01-01
      相关资源
      最近更新 更多