首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoError:尝试更新用户时的E11000

MongoError:尝试更新用户时的E11000
EN

Stack Overflow用户
提问于 2021-07-17 08:13:47
回答 1查看 41关注 0票数 0

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

这并不是持续发生的。有时它会成功更新,所以我不知道是什么导致了这个问题。

以下是指向我的代码的github链接:https://github.com/P4sc4l94/yelp-camp

我的用户架构:

代码语言:javascript
运行
复制
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
  }
});

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

代码语言:javascript
运行
复制
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`);
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-17 09:01:33

E11000是一个“重复键错误”,这意味着您不能对记录执行“新建”操作,如果您查询的是id以外的其他内容,则可以使用newupsert

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

如果您正在使用mongodb,那么您还应该将您的id转换为文档ID,我认为这是为了安全起见

代码语言:javascript
运行
复制
const mongoose = require('mongoose')
const { ObjectId } = mongoose.Types
const { id } = req.params
const user = await User.findOneAndUpdate({ _id: new ObjectId(id) }, { username, email, image });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68416427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档