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); }); }); };