enter image description here
我尝试使用findByIdAndpUpdate通过图中的Nodejs更新MongoDB Compass中的数据。
下面是我想更新的代码名称,价格,描述与相同的_id:
router.post('/update',(req,res)=>{
//new data from edit form
const update_id = req.body.update_id
let doc = {
name: req.body.name,
price: req.body.price,
description: req.body.description
}
console.log("New data from form :", doc)
console.log("ID :", update_id)
Product.findByIdAndUpdate(update_id,doc,{useFindAndModify:false})
res.redirect('/manage')
})
字符串
enter image description here的
这是我在VSCode中运行代码时发生的事情。MongoDB compass中似乎没有发生任何事情。
即使我在新表单中将更新数据发送到MongoDB指南针,一切仍然相同。
2条答案
按热度按时间ccgok5k51#
mongoose findByIdAndUpdate()方法是一个异步任务。这意味着它返回一个Promise,您需要将then()块链接到该Promise并等待任务完成,或者采用async/await模式。
让你的代码工作的一个简单的修复方法是像这样使用后者:
字符串
你会注意到我在
findByIdAndUpdate
中包含了{new:true}
选项。这告诉mongoose返回更新的文档,即它应用了更改。我没有包含{useFindAndModify:false}
,因为只有在使用旧版本的mongoose(如V5.x)时才需要此选项。请参阅此处的详细信息。如果您使用的是旧版本的mongoose,我建议您更新到V7.x,但如果您的组织不能,那么您当然可以重新添加该选项。unftdfkk2#
我修改了jQueeny的工作解决方案,它也可以工作:
字符串