我有这个架构
var CandidateProfileSchema = new Schema({
OtherExp: [{
typeExp:String,
organization: String,
startDate: String,
endDate: String,
role: String,
description: String,
achievements: String
}],
//more fields
});
这是我的控制器函数,用于在架构中放置/更新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
任何人都可以看到可能出现的问题吗? 相同的代码适用于我的架构的其他部分,我没有像这一样的数据嵌套。
这来自我的candidateProfile / index.js
router.put('/:id', controller.update);
router.put('/:id/skills', controller.updateSkills);
router.put('/:id/otherExp', controller.updateOtherExp);
答案 0 :(得分:1)
我在类似的问题上浪费了1个小时。我已经使用_.assign{In}()
,然后_.merge()
然后尝试Document#set()
我总是以数组中的重复条目结束。
适用于我的解决方法
[]
分配给即将设置的任何数组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);
答案 1 :(得分:0)
我认为这可能是一个错字: 如果你想在你的candidateProfile中更新OtherExp,它应该是这样的
candidateProfile.OtherExp = _.extend(candidateProfile.OtherExp, req.body.OtherExp);`
candidateProfile.save(//... etc)
答案 2 :(得分:0)
具有嵌套枚举的Mongoose模型与lodash合并或扩展相混淆。
首先尝试在分配前汇总数据。
var data = _.merge(candidateProfile.toJSON(), req.body);
candidateProfile.other = _.extend(candidateProfile.other, data.other);