programing

MongoError,err:E11000 중복 키 오류

javajsp 2023. 6. 28. 21:19

MongoError,err:E11000 중복 키 오류

다음과 같은 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}}

이 오류는 UserName이 중복되어 발생하는 것으로 알고 있지만 UserName을 고유한 제약 조건으로 설정하지 않았습니다.행을 추가할 때마다 고유한 전자 메일만 필요하므로 사용자 이름을 반복할 수 있습니다.어떻게 이를 달성할 수 있습니까?

@ManseUK 아마도 옳을 것입니다. UserName이 '키'인 것처럼 보입니다. 이 경우에는 인덱스입니다._id속성은 기본적으로 생성되는 "기본" 인덱스이지만 mongodb에서는 이러한 인덱스를 여러 개 가질 수 있습니다.

mongo 콘솔 시작 및 실행medinfo.users.getIndexes()무언가가 '사용자 이름'에 색인을 추가한 것이 틀림없습니다.

required: true그렇지 않습니다. 하지만 이전에 다른 설정으로 재생한 적이 있고 인덱스가 제거되지 않았을 수도 있습니다.

차단 중인 인덱스가 있어야 합니다.

db.collection.drop을 시도할 수 있습니다.인덱스() 메서드

medinfo.users.dropIndexes()

저는 제 프로젝트에서 비슷한 이슈를 받았습니다.저는 모든 서류를 정리하려고 노력했지만 아직도 dup 문제가 계속 발생합니다.이 컬렉션을 삭제하고 노드 서비스를 다시 시작하기 전까지는 제대로 작동했습니다.

제가 깨달은 것은 제 데이터 구조가 변하고 있다는 것입니다. 바로 여기가 바로versioning도움이 됩니다.

당신은 아마도 필요할 것입니다.mongoose-version모듈, 수행thing.remove({}, ...)또는 컬렉션 삭제: mongoose로 데이터베이스 삭제

관리 도구로 RoboMongo를 사용하기 때문에(강력히 추천합니다!) 콘솔에서 마우스 오른쪽 버튼을 클릭하거나 수집을 삭제했습니다.

코드 내에서 컬렉션을 쉽게 버전화하거나 삭제할 수 있는 방법을 아는 사람이 있다면, 이 스레드(그리고 나:)에 확실히 도움이 되므로 아래에 자유롭게 댓글을 게시하십시오.

언급URL : https://stackoverflow.com/questions/13454178/mongoerror-erre11000-duplicate-key-error