Search code examples
javaspringmongodbspring-data-mongodb

Spring Data MongoDB - Where to create an index programmatically for a Mongo collection?


To create an index for a collection (as documented here https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/) one can use something like the following:

mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("name",Order.ASCENDING));

But where in the program should I place this code snippet?

In the relevant repository's constructor? I've did it like that now and it works, but I somehow feel like it is bad design.

Somewhere in Mongo configuration? I haven't found a suitable method to override for that here https://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/config/AbstractMongoConfiguration.html


Solution

  • If you need to do it in programmatic way, you can just create new Spring's @Configuration and perform such initialization:

    @Configuration
    @DependsOn("mongoTemplate")
    public class CollectionsConfig {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        @PostConstruct
        public void initIndexes() {
            mongoTemplate.indexOps("collectionName") // collection name string or .class
                .ensureIndex(
                    new Index().on("name", Sort.Direction.ASC)
            );
        }
    }