我試圖在Nodejs中使用MongoDB制作一個CRUD應用程式,但當我撰寫更新部分并使用postman發送時,在終端中顯示的錯誤是
。**MongoServerError。對路徑'_id'進行更新會修改不可變的欄位'_id'**。
這是我更新Mongo資料庫中一個條目_id的代碼
路由器。 put('/api/employee/edit/:id' ,(req,res) => /span>{
const emp = new Employee( {
name:req.body.name,
email:req.body.email。
salary:req.body.salary。
});
Employee.findByIdAndUpdate(req.params. id, {$set: emp},(err,data) => {
if(! err){
res.status(200)。 json({code:200,message:"Employee updated successfully" /span>,
updateEmployee:資料
})
}
else{
console.log(err)。
}
})
})
uj5u.com熱心網友回復:
我認為把整個物件作為$set的引數意味著它將嘗試修改它的所有屬性,包括不應該被修改的_id,而且你也沒有在物件上設定。試著分別指定要修改的屬性:
Employee。 findByIdAndUpdate(req.params.id, {$set: {
name:req.body.name。
email:req.body.email。
salary:req.body.salary.
}},(err,data) =>/span> {
uj5u.com熱心網友回復:
你正在創建一個新的Employee檔案,并希望用這個新檔案來更新當前的檔案。你不能這樣做,因為這也將試圖覆寫檔案的_id。與其創建一個新的Employee檔案,你應該用新的資料更新現有的檔案:
router. put('/api/employee/edit/:id', (req, res) => /span> {
Employee.findByIdAndUpdate(req.params.id, {
name: req.body.name,
email: req.body.email。
salary: req.body.salary.
}, { new: true }, (err, data) => {
if (! err) {
res.status(200).json({code: 200, message: "雇員更新成功", updateEmployee: data })
} else {
res.status(400).json({code: 400, message: "雇員更新失敗。" })
}
})
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309500.html
標籤:
