Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoException: Index with name: code already exists with different options

I have a mongodb collection term with following structure

{
    "_id" : "00002c34-a4ca-42ee-b242-e9bab8e3a01f",
    "terminologyClass" : "USER",
    "code" : "X67",
    "terminology" : "some term related notes",
    "notes" : "some notes"
}

and a java class representing the term collection as Term.java

@Document
public class Term{  

    @Id
    protected String termId;

    @Indexed
    protected String terminologyClass;

    @Indexed(unique=true)
    protected String code;

    @Indexed
    protected String terminology;

    protected String notes;

    //getters & setters
}

I have many documents in term collection. Now I am added a new field to Term.java as

@Indexed
protected String status;

After adding field status to Term.java, while inserting a new term to term collection I am getting an the exceptoin :

com.mongodb.MongoException: Index with name: code already exists with different options

I am using MongoDB version : 2.6.5 and spring-data-mongodb version : 1.3.2

like image 447
faizi Avatar asked May 14 '15 07:05

faizi


2 Answers

You already have an index on that collection with the same name, but with a different definition. My guess is that your current code index is non-unique

try: db.Term.getIndexes()

If this is indeed the case (you have a non-unique index over code field), issue: db.Term.dropIndex("code_1") (replace with the code field index name).

Next time you boot your application, it's supposed to work alright.

Alternatively, remove the unique attribute from the @Indexed annotation (if you don't except it to be unique).

like image 181
Ori Dar Avatar answered Oct 25 '22 18:10

Ori Dar


have you tried to drop your collection and try again? usually there are many conflicts while applying new java mapping to existing mongodb collection

like image 31
mherBaghinyan Avatar answered Oct 25 '22 20:10

mherBaghinyan