我有一个像这样的MongoDb模式
var User = new Schema({ "UserName": { type: String, required: true }, "Email": { type: String, required: true, unique: true }, "UserType": { type: String }, "Password": { type: String } });
我正在尝试创建一个新用户, 这是使用mongoose ODM在NodeJs中完成的, 这是用于创建的代码:
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允许您使用多个。
_id
启动mongo控制台并运行medinfo.users.getIndexes()?必须在“ UserName”上添加了索引。
medinfo.users.getIndexes()
required: true 不会这样做,但是您以前可能曾玩过其他设置,但索引尚未删除?
required: true