Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@CompoundIndex not working in Spring Data MongoDB

I am working on an application using Spring Data MongoDB. I would like to create a compound index on one of my models. I have added a @CompoundIndex annotation at the top like so:

@Document
@CompoundIndexes({
    @CompoundIndex(name = "name_", def = "{ 'tenantId': 1, 'name': 1 }", unique = true)
})
public class MyModel {

}

However, the index is not created. I have also tried to directly place the @CompoundIndex above the class. The collection is still missing the index. The same index definition is working fine when created like so:

mongoTemplate.indexOps(MyModel.class).ensureIndex(new Index().named("name_").on("tenantId", Direction.ASC).on("name", Direction.ASC).unique());

I'd prefer to use the annotation-based definition of the index. Any ideas why this is not working?

like image 667
Fynn Avatar asked Jun 11 '15 07:06

Fynn


2 Answers

You need to add the following to application.properties:

spring.data.mongodb.auto-index-creation=true

or in application.yml:

spring:
  data:
    mongodb:
      auto-index-creation: true
like image 169
Ja'afar Naddaf Avatar answered Oct 03 '22 03:10

Ja'afar Naddaf


Couple years later, I faced the same issue. If none of above answers work for you (just like for me), try overriding autoIndexCreation() in MongoConfig class.

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {
  @Override
  protected boolean autoIndexCreation() {
    return true;
  }
}
like image 1
Wiktor Avatar answered Oct 03 '22 04:10

Wiktor