gpt4 book ai didi

javascript - Mongoose + lodash 扩展错误地复制对象数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:17 26 4
gpt4 key购买 nike

我有这个架构

var CandidateProfileSchema = new Schema({
OtherExp: [{
typeExp:String,
organization: String,
startDate: String,
endDate: String,
role: String,
description: String,
achievements: String
}],
//more fields
});

这是我的 Controller 函数,用于在架构中放置/更新 OtherExp 字段。

exports.updateOtherExp = function(req, res) {
if(req.body._id) { delete req.body._id; }
CandidateProfile.findOne({userId:req.params.id}, function (err, candidateProfile) {
if (err) { return handleError(res, err); }
if(!candidateProfile) { return res.send(404); }

candidateProfile.other= _.extend(candidateProfile.other, req.body.other);

candidateProfile.save(function (err) {
if (err) { return handleError(res, err); }
return res.json(200, candidateProfile);
});
});
};

我的数据是这样的第 1 行:a1、a2、a3、a4、a5、、a6、a7第 2 行:b1、b2、b3、b4、b5、、b6、b7

问题是保存到我的 mongodb 集合中的数据是第一行的重复第 1 行:a1、a2、a3、a4、a5、、a6、a7第 2 行:a1、a2、a3、a4、a5、、a6、a7

谁能看出可能是什么问题吗?相同的代码适用于我的架构的其他部分,在这些部分中我没有像本示例那样嵌套数据。

这是来 self 的candidateProfile/index.js

router.put('/:id', controller.update);
router.put('/:id/skills', controller.updateSkills);
router.put('/:id/otherExp', controller.updateOtherExp);

最佳答案

我刚刚在类似问题上浪费了 1 个小时。我使用了 _.assign{In}(),然后使用了 _.merge(),然后还尝试了 Document#set() i'总是以数组中的重复条目结束。

适合我的解决方法

  • []分配给任何即将设置的数组
  • 然后使用doc.set(attrs)分配整个树

示例(在我的例子中,some_problematic_array 导致了与所讨论的相同的奇怪行为):

var attrs = _.pick(req.body, [
'name',
'tags', // ...
"some_problematic_array"
]);
var doc = ///... ;

if( attrs.some_problematic_array ) doc.some_problematic_array = [];
^^^^ ***workaround***
doc.set(attrs);

关于javascript - Mongoose + lodash 扩展错误地复制对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771633/

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