복붙노트

[MONGODB] MongoDB의 몽구스의 E11000 중복 키 에러 인덱스

MONGODB

MongoDB의 몽구스의 E11000 중복 키 에러 인덱스

다음은의 user.js 모델에서 내 사용자 스키마입니다 -

var userSchema = new mongoose.Schema({
    local: {
        name: { type: String },
        email : { type: String, require: true, unique: true },
        password: { type: String, require:true },
    },
    facebook: {
        id           : { type: String },
        token        : { type: String },
        email        : { type: String },
        name         : { type: String }
    }
});

var User = mongoose.model('User',userSchema);

module.exports = User;

이것은 내가 내 컨트롤러에 사용하고 어떻게 -

var user = require('./../models/user.js');

이것은 제가 DB에 저장하고 어떻게 -

user({'local.email' : req.body.email, 'local.password' : req.body.password}).save(function(err, result){
    if(err)
        res.send(err);
    else {
        console.log(result);
        req.session.user = result;
        res.send({"code":200,"message":"Record inserted successfully"});
    }
});

오류 -

{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1  dup key: { : null }"} 

나는 DB 수집을 확인하고 그러한 중복 항목은, 제가 잘못하고있는 중이 알려없는 존재?

참고 - req.body.email 및 req.body.password가 가져 오는 값입니다.

나는 또한이 게시물하지만 도움 STACK LINK를 확인

내가 완전히 제거하면 그것은 그렇지 않으면 내가 local.email에 항목이 경우에도 오류 "중복"오류가 발생, 문서를 삽입

해결법

  1. ==============================

    1.오류 메시지는 이미 이메일로 널 (null)와 기록이 있다고 말하고있다. 즉, 당신은 이미 이메일 주소가없는 사용자를 가지고있다.

    오류 메시지는 이미 이메일로 널 (null)와 기록이 있다고 말하고있다. 즉, 당신은 이미 이메일 주소가없는 사용자를 가지고있다.

    이에 대한 관련 문서 :

    고유 색인

    즉, 스파 스 인덱스는 여러 문서를 모두 가진 널 값을 확인합니다.

    스파 스 인덱스

    댓글에서 :

    귀하의 오류가 키 mydb.users라는 것을 말한다. $ EMAIL_1 내가 당신이 users.email 및 users.local.email 모두에 인덱스를 가지고 있음을 의심하게하는 (이전의 순간 오래되고 사용하지 않는 것). 몽구스 모델에서 필드를 제거하면 데이터베이스에 영향을주지 않습니다. mydb.users.getIndexes 확인 () 이러한 경우 수동 mydb.users.dropIndex으로 원치 않는 인덱스를 제거 (<이름>).

  2. ==============================

    2.당신이 당신의 개발 환경에서 여전히 경우에, 나는 전체 DB를 삭제하고 새 스키마를 다시 시작합니다.

    당신이 당신의 개발 환경에서 여전히 경우에, 나는 전체 DB를 삭제하고 새 스키마를 다시 시작합니다.

    명령 줄에서

    ➜ mongo
    use dbName;
    db.dropDatabase();
    exit
    
  3. ==============================

    3.수집 인덱스를 확인합니다.

    수집 인덱스를 확인합니다.

    나는 차이로 인해 새 경로로 저장해야 필드 컬렉션의 오래된 인덱스에 그 문제를 가지고 있었다.

    몽구스는 독특한으로 필드를 지정 인덱스를 추가합니다.

  4. ==============================

    4.MongoDB를 컬렉션의 각 문서에 고유의 이메일 주소 값을 예상하므로, "EMAIL_ADDRESS": 음, 기본적으로이 오류는 예를 들어, 특정 필드에 고유 인덱스를 가지고 있다고 말하고있다.

    MongoDB를 컬렉션의 각 문서에 고유의 이메일 주소 값을 예상하므로, "EMAIL_ADDRESS": 음, 기본적으로이 오류는 예를 들어, 특정 필드에 고유 인덱스를 가지고 있다고 말하고있다.

    그럼 이전 스키마에서 고유 인덱스가 정의되지 않은 한 후, 동일한 이메일 주소 또는 전혀 이메일 주소 (NULL 값)로 2 사용자를 가입, 가정 해 봅시다.

    나중에 실수가 있다고 보았다. 그래서 당신은 스키마에 고유 인덱스를 추가하여 문제를 해결해야합니다. 오류 메시지가 다시 중복 값을 삽입 할 수 있다고 있도록하지만 컬렉션은 이미 중복이있다.

    당신은 기본적으로 세 가지 옵션이 있습니다 :

    나는 희망이 도움이 :)

  5. ==============================

    5.나는 5 살짜리에게 설명하고있다처럼 모든 사람들이 이해할 수 있도록 나는이에 대한 답변 / 솔루션을 설명합니다.

    나는 5 살짜리에게 설명하고있다처럼 모든 사람들이 이해할 수 있도록 나는이에 대한 답변 / 솔루션을 설명합니다.

    나는 그들의 이메일, 비밀번호, 전화 번호를 등록하는 app.I를 찾는 사람들이있다. 전화 번호와 이메일 모두가 모든 사람에 대해 고유해야합니다 있도록이 수단 - 내 MongoDB를 데이터베이스에서 내가 유일하게 자신의 전화 번호와 이메일 모두 기준으로 사용자를 식별합니다.

    그러나, 문제가 : 나는 모두가 전화 번호를 가지고 실현하지만, 모든 사람이 전자 메일 주소가 있습니다.

    이메일 주소가 돈`t 자들은 그들이 다음 주에 의해 이메일 주소가있을 것이라는 점을 저를 약속했다. 나는 그들이 이메일 입력 필드는 비워두고 그들의 PHONENUMBERS 등록을 진행하라고, 그래서 - 그러나 나는 그들이 어쨌든 등록합니다.

    그들은 그렇게.

    내 데이터베이스는 고유 이메일 주소 필드가 필요합니다 -하지만 난 자신의 이메일 주소로 '널'을 가진 사람들이 많이 있습니다. 나는 내 코드에 가서 약속 한 사람들이 다음 주에 자신의 프로필에 자신의 이메일을 추가 할 때 나중에 이메일 고유의 주소를 기입합니다 빈 / 널 이메일 주소 필드를 허용하는 내 데이터베이스 스키마를 말해 그래서.

    그래서 그 지금 윈 - 승리 모두를 위해 (하지만 -]) : 사람들이 등록, 내가 데이터를 가지고 기쁘게 생각합니다 ... 그리고 그것을 잘 사용하고 있기 때문에 내 데이터베이스 행복입니다 ...하지만 당신에 대해? 나는 당신에게 스키마를 만든 코드를 제공 아직입니다.

    여기에 코드입니다 : 참고 : 이메일의 스파 스 속성은 나중에 고유 한 값으로 채워집니다 널 (null) 값을 허용하는 내 데이터베이스를 알 것입니다.

    VAR userSchema = 새로운 mongoose.Schema ({   지역 : {     이름 : {유형 : 문자열}     이메일 : {유형 : 문자열이 필요 : 사실, 인덱스 : 참 독특한 : 사실, 스파 스 : 사실을}     암호 : {유형 : 문자열이 필요합니다 사실을}   },   페이스 북 : {     ID : {유형 : 문자열}     토큰 : {유형 : 문자열}     이메일 : {유형 : 문자열}     이름 : {유형 : 문자열}   } }); VAR 사용자 = mongoose.model ( '사용자', userSchema); module.exports = 사용자;

    나는 멋지게 설명했다 바랍니다. 해피 NodeJS 코딩 / 해킹!

  6. ==============================

    6.나는 비슷한 문제에 직면 나를 위해 다음의 작업을 특정 필드의 인덱스를 삭제 단지. https://docs.mongodb.com/v3.2/reference/method/db.collection.dropIndexes/

    나는 비슷한 문제에 직면 나를 위해 다음의 작업을 특정 필드의 인덱스를 삭제 단지. https://docs.mongodb.com/v3.2/reference/method/db.collection.dropIndexes/

  7. ==============================

    7.이것은 내 관련 경험입니다 :

    이것은 내 관련 경험입니다 :

    '사용자 스키마에서 나는 고유 키로'이름 '을 설정 한 후 나는 데이터베이스 구조를 설정 한 생각 몇 가지 실행을 달렸다.

    그 때 나는 '이름'과 같은 고유 키를 변경하지 않으며, 나는 데이터베이스에 데이터를 저장할 때 더 이상 '이름'값을 통과시켰다. 그래서 MongoDB를 자동으로 중복 키는 null로 새로운 기록의 '이름'값을 설정할 수 있습니다. 원래 설정을 무시하기 위해 '사용자 스키마에 {문자열} {독특한 : 거짓, 유형 이름} 나는하지 고유 키와 세트'이름 '키를 시도했다. 그러나, 그것은 작동하지 않았다.

    마지막으로, 나는 내 자신의 솔루션을했다 :

    그냥 가능성 '이름'키에 중복되지 않습니다 임의의 키 값을 설정할 때 데이터 기록 저장. 간단하게 수학 방법 ''+ 인 Math.random () + 인 Math.random ()는 임의의 문자열을합니다.

  8. ==============================

    8.저도 같은 문제를 가지고 있었다. 시도 디버깅 다른 방법으로는 알아낼 수 없었다. 내가 컬렉션을 삭제 시도하고 그 후 벌금을했다. 이것은 좋은 해결책은 아니지만 컬렉션은 많은 문서가있는 경우. 당신은 개발 초기 상태에있는 경우 그러나 컬렉션을 삭제하려고합니다.

    저도 같은 문제를 가지고 있었다. 시도 디버깅 다른 방법으로는 알아낼 수 없었다. 내가 컬렉션을 삭제 시도하고 그 후 벌금을했다. 이것은 좋은 해결책은 아니지만 컬렉션은 많은 문서가있는 경우. 당신은 개발 초기 상태에있는 경우 그러나 컬렉션을 삭제하려고합니다.

    db.users.drop();
    
  9. ==============================

    9.configuration..Just와 같은 이름의 컬렉션 몽고 쉘을 통해 MongoDB를에서 컬렉션을 제거하고 다시 시도 이미 있기 때문이다.

    configuration..Just와 같은 이름의 컬렉션 몽고 쉘을 통해 MongoDB를에서 컬렉션을 제거하고 다시 시도 이미 있기 때문이다.

    그것은 작동합니다 이제 응용 프로그램을 실행

  10. ==============================

    10.나는 비슷한 문제가 있었다 나는 기본적으로 몽고는 수집 당 하나의 스키마를 지원하는 것을 깨달았다. 어느 다른 모음에 새 스키마를 저장하거나 현재 콜렉션 내에서 호환되지 않는 스키마를 기존 문서를 삭제합니다. 또는 콜렉션 당 하나 이상의 스키마를 가질 수있는 방법을 찾을 수 있습니다.

    나는 비슷한 문제가 있었다 나는 기본적으로 몽고는 수집 당 하나의 스키마를 지원하는 것을 깨달았다. 어느 다른 모음에 새 스키마를 저장하거나 현재 콜렉션 내에서 호환되지 않는 스키마를 기존 문서를 삭제합니다. 또는 콜렉션 당 하나 이상의 스키마를 가질 수있는 방법을 찾을 수 있습니다.

  11. ==============================

    11.내 설정 / models.js에서 다음과 같은 구성을했을 때 나는이 같은 문제를 가지고

    내 설정 / models.js에서 다음과 같은 구성을했을 때 나는이 같은 문제를 가지고

    module.exports.models = {
      connection: 'mongodb',
      migrate: 'alter'
    }
    

    '안전'을 '바꾼다'에서 마이그레이션을 변경하면 나를 위해 그것을 해결했습니다.

    module.exports.models = {
      connection: 'mongodb',
      migrate: 'safe'
    }
    
  12. ==============================

    12.첫째 절약에 어떤 인덱스를 구축 한 후 스키마에서 속성을 제거한 후 동일한 문제. 여전히 인덱스를하였습니다 아닌 기존의 속성에 대한 널 (null) 값으로 스키마 리드에서 속성을 제거. 인덱스를 떨어 뜨리거나 처음부터 새 컬렉션으로 시작 여기에 있습니다.

    첫째 절약에 어떤 인덱스를 구축 한 후 스키마에서 속성을 제거한 후 동일한 문제. 여전히 인덱스를하였습니다 아닌 기존의 속성에 대한 널 (null) 값으로 스키마 리드에서 속성을 제거. 인덱스를 떨어 뜨리거나 처음부터 새 컬렉션으로 시작 여기에 있습니다.

    참고 : 오류 메시지가이 경우에 당신을 이끌 것입니다. 그것은 더 이상 존재하지 않는 경로를 가지고있다. 내 경우 메신저 이전 경로 (이 인덱스입니다!) ... $ uuid_1했지만, 새가 .... * priv.uuid_1

  13. ==============================

    13.내가 mangoose을 사용하여 정의 스키마를 수정하려고 할 때 저도 같은 문제를 가지고 있었다. 나는 문제가 내가 찾은 최고의 솔루션 .SO (내 경우에는 적어도) 사용자로부터 숨겨진 인덱스를 설명하는 등의 컬렉션을 만들 때 할 몇 가지 기본 과정이 있다는 이유 때문이라고 생각하는 것은 전체 컬렉션을 삭제했다 다시 시작합니다.

    내가 mangoose을 사용하여 정의 스키마를 수정하려고 할 때 저도 같은 문제를 가지고 있었다. 나는 문제가 내가 찾은 최고의 솔루션 .SO (내 경우에는 적어도) 사용자로부터 숨겨진 인덱스를 설명하는 등의 컬렉션을 만들 때 할 몇 가지 기본 과정이 있다는 이유 때문이라고 생각하는 것은 전체 컬렉션을 삭제했다 다시 시작합니다.

  14. ==============================

    14.나는 같은 문제가 있었다. 문제는 모델에서 하나 개의 필드를 제거했는지이었다. 나는 그것을 수정 DB를 떨어 때

    나는 같은 문제가 있었다. 문제는 모델에서 하나 개의 필드를 제거했는지이었다. 나는 그것을 수정 DB를 떨어 때

  15. ==============================

    15.나는 또한이 문제에 직면하고 나는 그것을 해결했다. 이메일은 이미 여기에 존재한다는 것을이 오류를 보여줍니다. 그래서 당신은 이메일 속성에 대한 귀하의 모델에서이 줄을 제거해야합니다.

    나는 또한이 문제에 직면하고 나는 그것을 해결했다. 이메일은 이미 여기에 존재한다는 것을이 오류를 보여줍니다. 그래서 당신은 이메일 속성에 대한 귀하의 모델에서이 줄을 제거해야합니다.

    unique: true
    

    이 경우에도 작동되지 않을 수 수 있습니다. 그래서 당신의 MongoDB를에서 컬렉션을 삭제하고 서버를 다시 시작해야합니다.

  16. ==============================

    16.이 데이터베이스에 이미 존재하는 경우 컬렉션 이름을 변경, 그것은 오류가 표시됩니다. 당신은 고유의 어떠한 속성을 주어진다면 같은 오류가 발생합니다.

    이 데이터베이스에 이미 존재하는 경우 컬렉션 이름을 변경, 그것은 오류가 표시됩니다. 당신은 고유의 어떠한 속성을 주어진다면 같은 오류가 발생합니다.

  17. ==============================

    17.나는 재산에 고유 한 속성을 제거하여 해결 동일한 문제가 있었다.

    나는 재산에 고유 한 속성을 제거하여 해결 동일한 문제가 있었다.

    그냥 확인 또는 스키마에 대한 고유 속성 값을 확인하는 또 다른 방법을 찾을 수 있습니다.

  18. ==============================

    18.컬렉션을 지우거나 MongoDB를 데이터베이스에서 전체 컬렉션을 삭제하고 나중에 다시 시도하십시오.

    컬렉션을 지우거나 MongoDB를 데이터베이스에서 전체 컬렉션을 삭제하고 나중에 다시 시도하십시오.

  19. from https://stackoverflow.com/questions/24430220/e11000-duplicate-key-error-index-in-mongodb-mongoose by cc-by-sa and MIT license