gpt4 book ai didi

javascript - Lodash 与 Mongoose 合并

转载 作者:数据小太阳 更新时间:2023-10-29 04:34:52 25 4
gpt4 key购买 nike

这是使用 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'

我已经尝试创建自己的自定义 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'

因此,我无法将 entityreq.body 的值扩展到目标 updated。我猜只有结构被复制。有人请让我知道我哪里错了。谢谢。

最佳答案

我可以通过将 _.merge 更改为 _.extend 来解决这个问题,然后直接对 findById 返回的结果调用保存而不是变量 updated

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

关于javascript - Lodash 与 Mongoose 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25448343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com