DBAtlas · 데이터베이스 운영 아틀라스

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(...). 그렇지 않으면 정의를 기존 인덱스와 정확히 일치시키거나 새 인덱스에 다른 이름을 지정한다. 마이그레이션 스크립트를 멱등하게 만든다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목