我有一个这样的 MongoDb 架构
var User = new Schema({
"UserName": { type: String, required: true },
"Email": { type: String, required: true, unique: true },
"UserType": { type: String },
"Password": { type: String }
});
我正在尝试创建一个新用户 这是在 NodeJs 中使用 mongoose ODM 完成的 这是创建的代码:
controller.createUser = function (req, res) {
var user = new models.User({
"UserName": req.body.UserName.toLowerCase(),
"Email": req.body.Email.toLowerCase(),
"UserType": req.body.UserType.toLowerCase()
});
models.User.findOne({ 'Email': user.Email }, function (err, olduser) {
if (!err) {
if (olduser) {
res.send({ 'statusCode': 409, 'statusText': 'Email Already Exists' });
}
else if (!olduser) {
user.setPassword(req.body.Password);
user.save(function (err, done) {
if (!err) {
console.log(user);
res.send({ 'statusCode': 201, 'statusText': 'CREATED' });
}
else {
res.send({ 'Status code': 500, 'statusText': 'Internal Server Error' });
}
});
}
}
else {
res.send({ 'statusCode': 500, 'statusText': 'ERROR' });
}
});
};
为了创建新用户,我给出的属性和值如下:
{
"UserName": "ann",
"Email": "ann@ann.com",
"UserType": "normaluser",
"Password":"123456"
}
我收到这样的错误:
{"Status code":500,"statusText":"Internal Server Error","Error":{"name":"MongoError","err":"E11000 duplicate key error index: medinfo.users.$UserName_1 dup key: { : \"ann\" }","code":11000,"n":0,"connectionId":54,"ok":1}}
我知道这个错误是因为用户名重复,但是我没有设置用户名具有唯一性约束。每当我添加新行时,我只需要电子邮件是唯一的,用户名可以重复.如何做到这一点??
最佳答案
@ManseUK 可能是对的,看起来 UserName 是一个“键”——在这种情况下是一个索引。 _id
属性是默认创建的“主”索引,但 mongodb 允许您拥有多个。
启动一个 mongo 控制台并运行 medinfo.users.getIndexes()
?一定是某些东西在“用户名”上添加了索引。
required: true
不会这样做,但您之前可能玩过其他设置并且索引没有被删除?
关于javascript - MongoError,错误 :E11000 duplicate key error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454178/