mongoose不会更新对象字段

时间:2015-06-19 09:32:34

标签: mongodb

我是moogoose的新手,我遇到了db中难以更新的对象。

这是我的shcema。

var FormSchema = new Schema({
  formContent : {
    type : Object,
    required : true
  }, 
  formName : String,
  createdDateTime : Date
});

以下是更新字段的控制器,我使用过' []'它可以清理场地,但每当我推出一个新物体并尝试更换时,它就会保持不变...任何想法或建议都会非常感激。为此而坚持......

// Updates an existing form in the DB.
exports.update = function(req, res) {
  if(req.body._id) { delete req.body._id; }
  Form.findById(req.params.id, function (err, form) {
    if (err) { return handleError(res, err); }
    if(!form) { return res.send(404); }
    var updated = _.merge(form, req.body);
    // updated.formContent = [];
    updated.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.json(200, form);
    });
  });
};

1 个答案:

答案 0 :(得分:1)

尝试使用 _.extend _.assign代替:

var updated = _.assign(form, req.body);

ShitalShah的 answer 突出了合并和扩展之间的差异:

  

以下是扩展/分配的工作方式:对于源中的每个属性,请复制它   价值按原样到达目的地。如果属性值本身是对象,   它们的属性没有递归遍历。整个对象   将从源头获取并设置到目的地。

     

以下是合并的工作原理:对于源中的每个属性,请检查是否存在   财产是对象本身。如果它然后递归下来并尝试   将子对象属性从源映射到目标。所以   基本上我们将对象层次结构从源合并到目标。   而对于扩展/分配,它是来自的简单的一级属性副本   来源目的地。

JSBin 来说明差异。

exports.update = function(req, res) {
  if(req.body._id) { delete req.body._id; }
  Form.findById(req.params.id, function (err, form) {
    if (err) { return handleError(res, err); }
    if(!form) { return res.send(404); }
    var updated = _.assign(form, req.body);
    // updated.formContent = [];
    updated.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.json(200, form);
    });
  });
};