[英]Error while updating a document in MongoDB
我有一個管理門戶,我在其中處理我的 Mongo 數據庫中存在的所有 collections。 現在,我正在構建更新操作。 我想找到一個使用他的用戶名存在的用戶,並使用管理員執行的更改來更新文檔。
因此,在我的 controller 中,我有一個端點,它執行以下操作:
exports.updateUser = async(req, res) => {
try{
var user = new User({
firstName: req.body.firstName,
lastName: req.body.lastName,
username:req.body.username,
password: req.body.password,
email: req.body.email
});
const static_username = req.body.static_username;
await User.findOneAndUpdate({static_username} , user, { useFindAndModify: false})
.then(data => {
if(!data){
res.status(404).send({ message : `Cannot Update user with ${id}. Maybe user not found!`})
}else{
res.redirect('/admin');
}
})
.catch(err =>{
res.status(500).send({ message : "Error Update user information"})
})
} catch {
console.log(err);
}
}
它采用管理員從正文中所做的更改,並將它們放入user
object。 我還將更新前的用戶名設置為變量static_username
,以便找到我進行更新的用戶。
我得到一個存在於查詢捕獲中的響應:
{ message : "Error Update user information"}
錯誤:
MongoServerError: Plan executor error during findAndModify :: caused by :: Performing an update on the path '_id' would modify the immutable field '_id'
任何想法為什么找到的用戶沒有得到更新?
您發送的User
object 默認具有_id
字段。 因此,您在不知不覺中嘗試修改_id
字段並將其設置為零。 要解決這個問題,您可以簡單地發送一個普通的 object。
var user = {
firstName: req.body.firstName,
lastName: req.body.lastName,
username:req.body.username,
password: req.body.password,
email: req.body.email
};
我認為更新輸入應該只包含您要更新的字段。 如果用戶名是您用戶 model 中的唯一 ID,則您需要將其從用戶 object 中刪除 - delete user.username
- 在將其傳遞給findOneAndUpdate
之前,因為無法更新 ID。 此外,如評論中所述,嘗試用{ username: static_username}
替換過濾器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.