Javascript Lodash与猫鼬合并
下面是使用express.js和mongoose的更新方法的代码片段。 我试图将现有的mongo实体与来自请求有效负载主体的json对象合并Javascript Lodash与猫鼬合并,javascript,node.js,express,mongoose,lodash,Javascript,Node.js,Express,Mongoose,Lodash,下面是使用express.js和mongoose的更新方法的代码片段。 我试图将现有的mongo实体与来自请求有效负载主体的json对象合并 exports.update=函数(req,res){ if(请求主体.\u id){删除请求主体.\u id;} Entity.findById(req.params.id,函数(err,Entity){ if(err){returnhandleerror(res,err);} if(!entity){return res.send(404);} var
exports.update=函数(req,res){
if(请求主体.\u id){删除请求主体.\u id;}
Entity.findById(req.params.id,函数(err,Entity){
if(err){returnhandleerror(res,err);}
if(!entity){return res.send(404);}
var updated=u.merge(实体,请求主体);
更新。保存(函数(错误){
if(err){returnhandleerror(res,err);}
返回res.json(200,实体);
});
});
};
不幸的是,这不起作用。我犯了这个错误
node_modules/mongoose/lib/document.js:1272
doc.save(handleSave);
^
TypeError: Object #<Object> has no method 'save'
有了这个变化,我得到了这个信息:
node_modules/mongoose/lib/document.js:1245
return self.getValue(i);
^
TypeError: Object #<Object> has no method 'getValue'
node_modules/mongoose/lib/document.js:1245
返回self.getValue(i);
^
TypeError:对象#没有方法“getValue”
因此,我无法将
实体
和请求主体
的值扩展到目标更新的
。我想只有结构被复制了。有人请让我知道我错在哪里。谢谢。我可以通过将.merge
更改为.extend
,然后直接对findById
返回的结果调用save,而不是变量updated
,来解决这个问题
exports.update=函数(req,res){
if(请求主体.\u id){删除请求主体.\u id;}
Entity.findById(req.params.id,函数(err,Entity){
if(err){returnhandleerror(res,err);}
if(!entity){return res.send(404);}
_.扩展(实体、请求主体);
实体.save(函数(err){
if(err){returnhandleerror(res,err);}
返回res.json(200,实体);
});
});
};
它应该可以正常工作。。。我对下划线.extend做了同样的事情,它成功了。无论如何,您可以使用entity.set(req.body)
来代替。谢谢@leonideschastny,这对我很有用,但我仍然不明白.merge
为什么不起作用,知道吗?尝试使用.merge
忽略其返回值:merge(entity,req.body);实体。保存(…)
。如果行得通的话,我就知道怎么回事了。