Lodash与mongoose合并

这里是使用express.js和mongoose的更新方法的代码片段。 我试图合并现有的mongo实体与请求负载体中的json对象。

exports.update = function(req, res) { if(req.body._id) { delete req.body._id; } Entity.findById(req.params.id, function (err, entity) { if (err) { return handleError(res, err); } if(!entity) { return res.send(404); } var updated = _.merge(entity, req.body); updated.save(function (err) { if (err) { return handleError(res, err); } return res.json(200, entity); }); }); }; 

这不幸的是不起作用。 我得到这个错误

 node_modules/mongoose/lib/document.js:1272 doc.save(handleSave); ^ TypeError: Object #<Object> has no method 'save' 

我尝试创build自己的自定义merge方法,但仍然无法实现合适的合并:

 exports.update = function(req, res) { if(req.body._id) { delete req.body._id; } Entity.findById(req.params.id, function (err, entity) { if (err) { return handleError(res, err); } if(!entity) { return res.send(404); } var updated = merger(resume, req.body)//_.merge(resume, req.body); updated.save(function (err) { if (err) { return handleError(res, err); } return res.json(200, entity); }); }); }; function merger (a, b) { if (_.isObject(a)) { return _.merge({}, a, b, merger); } else { return a; } }; 

有了这种差异,我有这个消息:

 node_modules/mongoose/lib/document.js:1245 return self.getValue(i); ^ TypeError: Object #<Object> has no method 'getValue' 

因此,我无法扩展entity的值,并且req.body updated的目标。 只有结构被复制我猜。 有人请让我知道我错了。 谢谢。

我能够通过将_.merge更改为_.extend ,然后直接调用findById返回的结果而不是updated的variables来解决此问题。

 exports.update = function(req, res) { if(req.body._id) { delete req.body._id; } Entity.findById(req.params.id, function (err, entity) { if (err) { return handleError(res, err); } if(!entity) { return res.send(404); } _.extend(entity, req.body); entity.save(function (err) { if (err) { return handleError(res, err); } return res.json(200, entity); }); }); };