Spring Data MongoDB - 在哪里以编程方式为Mongo集合创建索引?

2022-09-02 01:13:29

若要为集合创建索引(如此处 https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/ 所述),可以使用如下所示的内容:

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

但是我应该在程序中的哪个位置放置此代码片段?

在相关存储库的构造函数中?我现在已经这样做了,它的工作原理,但我不知何故觉得这是糟糕的设计。

Mongo配置中的某个地方?我还没有找到合适的方法来覆盖这里 https://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/config/AbstractMongoConfiguration.html


答案 1

如果您需要以编程方式执行此操作,则可以创建新的Spring@Configuration并执行此类初始化:

@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)
        );
    }
}

答案 2

MongoDB支持复合索引,其中单个索引结构保存对多个字段的引用。

让我们看一个使用复合索引的快速示例:

@QueryEntity
@Document
@CompoundIndexes({
    @CompoundIndex(name = "email_age", def = "{'email.id' : 1, 'age': 1}")
})
public class User {
    //
}