findByIdAndUpdate不工作Mongoose MongoDB

0aydgbwb  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(133)

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指南针,一切仍然相同。

ccgok5k5

ccgok5k51#

mongoose findByIdAndUpdate()方法是一个异步任务。这意味着它返回一个Promise,您需要将then()块链接到该Promise并等待任务完成,或者采用async/await模式。
让你的代码工作的一个简单的修复方法是像这样使用后者:

router.post('/update', async (req,res)=>{ //< Mark callback function as async
   try{
      //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)
      const updatedDoc = await Product.findByIdAndUpdate(update_id, doc, {new:true}); //< Use of await and assign return value to variable 
      res.redirect('/manage')
   }catch(err){
      console.log(err);
      //Handle error
   }
});

字符串
你会注意到我在findByIdAndUpdate中包含了{new:true}选项。这告诉mongoose返回更新的文档,即它应用了更改。我没有包含{useFindAndModify:false},因为只有在使用旧版本的mongoose(如V5.x)时才需要此选项。请参阅此处的详细信息。如果您使用的是旧版本的mongoose,我建议您更新到V7.x,但如果您的组织不能,那么您当然可以重新添加该选项。

unftdfkk

unftdfkk2#

我修改了jQueeny的工作解决方案,它也可以工作:

router.post('/update',(req,res)=>{
const updateid = req.body.updateid
let data = {
    name:req.body.name,
    price:req.body.price,
    description:req.body.description
}
Product.findByIdAndUpdate(updateid,data)
.then((data)=>{
    res.redirect('manage')
    console.log("New data from form :", data)
    console.log(updateid)
}).catch((err)=>{
    console.log(err);
    res.redirect('manage');
})    })

字符串

相关问题