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 是一个“重复键错误”,这意味着您不能对记录进行“新建”,如果您查询的不是 [=],则可以使用 new
和 upsert
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 });
所以我有一个节点应用程序,用户可以在其中注册一个帐户(用户名、电子邮件、密码、图标图像)以使用该站点。我创建了一个个人资料页面,其中包含 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 是一个“重复键错误”,这意味着您不能对记录进行“新建”,如果您查询的不是 [=],则可以使用 new
和 upsert
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 });