簡體   English   中英

更新 MongoDB 中的文檔時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM