85 IndexOptionsConflict: Index already exists with different options / different name (다른 옵션/이름의 인덱스가 이미 존재)
MongoDB의미
생성하려는 인덱스가 기존 인덱스와 충돌한다. 같은 이름의 인덱스가 다른 옵션을 가지고 있거나, 같은 키와 옵션의 동등한 인덱스가 다른 이름으로 이미 존재한다. MongoDB는 충돌하는 정의로 같은 인덱스를 다시 생성하도록 허용하지 않는다.
원인
같은 이름과 키지만 다른 옵션(예: expireAfterSeconds, partialFilterExpression, collation)으로 인덱스를 생성하거나, 기존 인덱스와 동등한 인덱스를 다른 이름으로 재정의한 경우다('Index already exists with a different name'). 애플리케이션/마이그레이션 스크립트에서 인덱스 정의가 시간이 지나며 어긋나는 것이 전형적인 원인이다. 같은 이름에 다른 키를 사용하면 대신 86 IndexKeySpecsConflict가 발생한다.
해결 방법
기존 인덱스 확인: db.my_collection.getIndexes(). 옵션을 정말 변경하려면 이전 인덱스를 삭제하고 새로 생성한다: db.my_collection.dropIndex('index_name') 후 createIndex(...). 그렇지 않으면 정의를 기존 인덱스와 정확히 일치시키거나 새 인덱스에 다른 이름을 지정한다. 마이그레이션 스크립트를 멱등하게 만든다.
같은 데이터베이스의 다른 항목
- 20 IllegalOperationIllegal operation
- 48 NamespaceExistsNamespace (collection) already exists
- 11601 InterruptedOperation was interrupted
- 67 CannotCreateIndexCannot create index
- 27 IndexNotFoundIndex not found
- 79 UnknownReplWriteConcernUnknown replica set write concern
- 10107 NotWritablePrimarynot master / not writable primary