MongoError: E11000 when trying to update a user

MongoError: E11000 when trying to update a user

所以我有一个节点应用程序,用户可以在其中注册一个帐户(用户名、电子邮件、密码、图标图像)以使用该站点。我创建了一个个人资料页面,其中包含 link 到编辑表单 edit/update 您的用户名、电子邮件和图标图像。但是,每当我尝试更新用户信息时,我都会收到 MongoError。

这种情况不会一直发生。有时更新成功,所以我不知道是什么问题。

这是我的代码 github link:https://github.com/P4sc4l94/yelp-camp

我的用户架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const passportLocalMongoose = require('passport-local-mongoose');

const UserSchema = new Schema({
  email: {
    type: String,
    required: true,
    unique: true
  },
  image: {
    type: String
  }
});

我的用户控制器正在尝试更新信息:

module.exports.editProfile = async (req, res, next) => {
  const {id} = req.params;
  const {username} = req.body.user;
  const {email} = req.body.user;
  const {image} = req.body.user
  console.log(id)
  console.log(username)
  console.log(email)
  console.log(image)
  const user = await User.findOneAndUpdate(id, {username, email, image}, {
    new: true
  });
  user.save();

  console.log(user);
  req.logout();
  req.flash('success', 'Successfully updated profile!')
  return res.redirect(`/login`);
};

E11000 是一个“重复键错误”,这意味着您不能对记录进行“新建”,如果您查询的不是 [=],则可以使用 newupsert 13=]

你应该在使用时做 await user.save(),但没有理由在这里做

如果您使用 mongodb ID,您还应该将 id 转换为文档 ID,我认为您这样做是为了安全起见

const mongoose = require('mongoose')
const { ObjectId } = mongoose.Types
const { id } = req.params
const user = await User.findOneAndUpdate({ _id: new ObjectId(id) }, { username, email, image });