猫鼬 + lodash 扩展对象复制数组不正确
Mongoose + lodash extend copying array of object incorrectly
>我有这个模式
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
任何人都可以看到可能的问题是什么吗?相同的代码适用于我的架构的其他部分,其中我没有像这个那样嵌套数据。
这是来自我的候选人个人资料/索引.js
router.put('/:id', controller.update);
router.put('/:id/skills', controller.updateSkills);
router.put('/:id/otherExp', controller.updateOtherExp);
我只是在类似的问题上浪费了 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);
我认为这可能是一个错字:如果你想在你的候选人个人资料中更新 OtherExp,它应该是这样的
candidateProfile.OtherExp = _.extend(candidateProfile.OtherExp, req.body.OtherExp);`
candidateProfile.save(//... etc)
具有
嵌套枚举的猫鼬模型会弄乱lodash合并或扩展。
在分配之前,请尝试先聚合数据。
var data = _.merge(candidateProfile.toJSON(), req.body);
candidateProfile.other = _.extend(candidateProfile.other, data.other);
相关文章:
- 我需要迭代一个JSON数组——不知道如何做到——已经搜索过了,但仍然可以'我一点也不知道
- 通过AJAX从具有LazyLoadingEnabled=true的EF返回的数组不正确
- 正在复制数组并提取
- For循环与数组不起作用
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- Lodash 从与值数组不匹配的数组中获取项目
- javascript中嵌套对象的深度复制数组
- 循环浏览页面上所有选中的复选框并将id拉入数组不起作用
- 文本框搜索/Javascript函数数组**不对应**
- 带有附加元素的新数组不会可视化
- 映射 jQuery 对象的数组不起作用
- Javascript-自定义数组不起作用
- 如何在javascript中复制数组的值并将其推送至相同的数组
- Javascript 对象数组不返回正确的值
- 猫鼬 + lodash 扩展对象复制数组不正确
- 正确的MongoDB集合结构,包括Meteor中的值数组(不带键)
- 数组.切片不起作用,它只是原样复制数组,而不是减去一些值
- 如何在javascript中添加(复制)数组内容到另一个数组,而不替换数组的内容
- 为什么它在数组中正确工作,而在对象中却不正确
- Javascript计算排列——为什么当我不复制数组时,我的代码返回不需要的解决方案?