0

我正在尝试使用猫鼬更新文档。我想一次更新多个属性。我尝试使用扩展运算符来克隆文档并覆盖需要使用用户输入更新的属性,但它返回了 error 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);
    })
});
4

2 回答 2

2

您可以使用Object.assign

post= Object.assign(post, updatedFields);

assign 函数可以接受任意数量的参数。每个参数都应用在最左边,从左到右。因此,如果多个参数具有相同的属性,则其值将是右边的一个。

于 2019-07-16T10:55:17.057 回答
1

使用Object.assing它不会更改对象引用。

我建议抛出错误的状态,发送带有一些状态代码的响应。

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);
    })
});
于 2019-07-16T10:54:48.713 回答