Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Lodash与猫鼬合并_Javascript_Node.js_Express_Mongoose_Lodash - Fatal编程技术网

Javascript Lodash与猫鼬合并

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

下面是使用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 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);实体。保存(…)
。如果行得通的话,我就知道怎么回事了。