对于更新,我使用以下代码:
router.put('/:id', async (req, res) => {
const { error } = validateProduct(req.body);
if (error) return res.status(400).send(error.details[0].message);
const product = await Product.findByIdAndUpdate(req.params.id,
{
name: req.body.name,
description: req.body.description,
category: req.body.category,
tags: req.body.tags,
withdrawn: req.body.withdrawn,
extraData: {
brand: req.body.extraData.brand,
quantity: req.body.extraData.quantity,
type: req.body.extraData.type
}
},
{new: true}
);
if (!product) return res.status(404).send('The product with the given ID was not found.');
res.send(product);
});
字符串
我想做的是创建一个Patch操作,它只更新某些字段,而不是像上面的更新那样更新所有字段。这些字段不是标准的,但它们是更新操作的上述字段之一。
3条答案
按热度按时间4uqofj5v1#
你可以试试这个代码片段(虽然没有在本地测试)。我们的想法是只更新Product中的那些字段,这些字段在req. body中提到过。确保你的验证器是安全的,否则你可能会以nosql注入而告终。
字符串
我也确信你可以在这行代码中使用lodash,在这里你可以使用for-in循环;)
这种方法的缺点是需要2个查询到mongo,因为你需要一个真实的的文档来比较。更新操作也不会触发模型的保存后钩子。如果你需要它们-你应该先findById(),更新必要的字段,然后在你找到的文档上点击.保存()。希望有帮助
7eumitmz2#
字符串
u1ehiz5o3#
app.route(“/articles”).patch(function(req,res)
字符串