我是moogoose的新手,我遇到了db中难以更新的对象。
这是我的shcema。
var FormSchema = new Schema({
formContent : {
type : Object,
required : true
},
formName : String,
createdDateTime : Date
});
以下是更新字段的控制器,我使用过' []'它可以清理场地,但每当我推出一个新物体并尝试更换时,它就会保持不变...任何想法或建议都会非常感激。为此而坚持......
// Updates an existing form in the DB.
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
Form.findById(req.params.id, function (err, form) {
if (err) { return handleError(res, err); }
if(!form) { return res.send(404); }
var updated = _.merge(form, req.body);
// updated.formContent = [];
updated.save(function (err) {
if (err) { return handleError(res, err); }
return res.json(200, form);
});
});
};
答案 0 :(得分:1)
尝试使用 _.extend
或_.assign
代替:
var updated = _.assign(form, req.body);
ShitalShah的 answer 突出了合并和扩展之间的差异:
以下是扩展/分配的工作方式:对于源中的每个属性,请复制它 价值按原样到达目的地。如果属性值本身是对象, 它们的属性没有递归遍历。整个对象 将从源头获取并设置到目的地。
以下是合并的工作原理:对于源中的每个属性,请检查是否存在 财产是对象本身。如果它然后递归下来并尝试 将子对象属性从源映射到目标。所以 基本上我们将对象层次结构从源合并到目标。 而对于扩展/分配,它是来自的简单的一级属性副本 来源目的地。
JSBin 来说明差异。
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
Form.findById(req.params.id, function (err, form) {
if (err) { return handleError(res, err); }
if(!form) { return res.send(404); }
var updated = _.assign(form, req.body);
// updated.formContent = [];
updated.save(function (err) {
if (err) { return handleError(res, err); }
return res.json(200, form);
});
});
};