我正在尝试使用猫鼬更新文档。我想一次更新多个属性。我尝试使用传播运算符来克隆文档并覆盖需要使用用户输入进行更新的属性,但是它返回了错误document.save is not a function
。我有点理解为什么会引发错误。因为它不是同一对象,所以它只是一个克隆,因此没有save
方法。如果我错了,请纠正我。
所以我的问题是:有没有一种方法可以像传播算子一样更新对象?
我的代码:
router.put("/posts/update", (req, res)=>{
const {id, updatedFields} = req.body;
Post.findById(id).exec((err, post)=>{
if(err) throw err;
post = {...post, updatedFields};
post.save();
res.json(post);
})
});
答案 0 :(得分:1)
使用Object.assing
不会更改对象引用。
我建议在状态下抛出err,并使用一些状态代码发送响应。
router.put("/posts/update", (req, res) => {
const {
id,
updatedFields
} = req.body;
Post.findById(id).exec((err, post) => {
if (err) return res.status(400).json({err, msg: 'Some msg'});
post = Object.assign(post, updatedFields);
post.save();
res.json(post);
})
});
答案 1 :(得分:1)
您可以使用Object.assign
post= Object.assign(post, updatedFields);
assign函数可以接受任意多个参数。每个参数都应用在最左侧,即从左到右。因此,如果多个参数拥有相同的属性,则其值将为右数。