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?
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
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;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With