Mongoose通过从文档中删除单个对象来更新文档

时间:2016-09-13 19:53:04

标签: javascript node.js mongodb express mongoose

无法找到解决方案:(

我正在使用Node,express和mongoose进行联系人应用。

当用户前往路线/联系人/:id

执行此查询:

Contact.findOne(req.dbQuery, function(err, data) {
    res.json(data);
});

回应是:

 {
     _id: 57 d71ceb57658ba24866a1b0,
     __v: 0,
     firstName: ['Doe', 'text'],
     lastName: ['John', 'text'],
     id: 4,
     homePhone: ['', 'tel'],
     cellPhone: ['', 'tel'],
     birthday: ['', 'date'],
     website: ['', 'url'],
     address: ['test Adress', 'text'],
 }

数组中的每个项目都会在页面上显示为标签和文本框

使用ng-repeat。

在每个文本框旁边,我有一个X按钮来删除文本框。

在每个X按钮上点击="删除(字段)"

$scope.remove = function(field){ //field can be 'homePhone' or any item 
     delete $scope.record[field];
     $scope.record.$update(function(updatedRecord){
         $scope.record = updatedRecord;
       }) 
     };

问题是,当我点击X按钮并致电

删除(' homePhone')(或任何字段 - ' cellPhone'或任何其他字段)

我通过req.body将正确的数据发送到服务器(我可以看到数据

没有删除的字段)但是得到的回复包括我只是

的字段

移除。

在服务器上我执行:

Contact.findOneAndUpdate({
    _id: contact._id
}, req.body, {
    upsert: true,
    new: true
}, function(err, data) {
    res.json(data);
});

我还有一个"添加新字段"通过添加项目添加文本框的按钮

到数组。我在添加新字段

时执行相同的查询

这就是我使用{upsert:true,new:true}

的原因

我必须改变一切吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

请使用$unset运算符从文档中删除任何字段。这是首选方法,或在执行更新时从文档中删除字段。