Java SpringDataMongoDB-在哪里以编程方式为Mongo集合创建索引?
要为集合创建索引(如本文所述),可以使用以下方法:Java SpringDataMongoDB-在哪里以编程方式为Mongo集合创建索引?,java,spring,mongodb,spring-data-mongodb,Java,Spring,Mongodb,Spring Data Mongodb,要为集合创建索引(如本文所述),可以使用以下方法: mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("name",Order.ASCENDING)); 但是我应该把这个代码片段放在程序的什么地方呢 在相关存储库的构造函数中?我现在就是这样做的,而且很管用,但不知怎么的,我觉得这是个糟糕的设计 Mongo配置中的某个地方?我在这里还没有找到一个合适的方法来覆盖它如果您需要以编程方式进行,您可以创建新的Spring的@
mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("name",Order.ASCENDING));
但是我应该把这个代码片段放在程序的什么地方呢
在相关存储库的构造函数中?我现在就是这样做的,而且很管用,但不知怎么的,我觉得这是个糟糕的设计
Mongo配置中的某个地方?我在这里还没有找到一个合适的方法来覆盖它如果您需要以编程方式进行,您可以创建新的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)
);
}
}
您是否尝试过在person pojo中注释(@index)索引字段(名称)?这对你没用吗?或者这可能不是你想要的吗?@Veeram,这不是我想要的。我有两个类似的DB模型类,其中一个扩展了另一个,其中一个应该在2个字段上有一个复合唯一索引,而另一个应该在1个字段上只有一个简单唯一索引。因此,我为扩展类添加了
@compoundex
注释,并且必须以编程方式为扩展类添加索引。@Maxim您找到答案了吗?我也有同样的疑问。@NishantBhardwaz我只是把它放在存储库的构造函数中,没有更好的选项。这是控制器、服务还是存储库文件的一部分?这是一个单独的类,将在开始时调用。谢谢Dawid。我觉得把它作为MongoRepositoryInterface的一个内部类是很舒服的,假设注释@DependsOn(“mongoTemplate”)正确吗在这种情况下不需要
,因为对MongoTemplate
的自动连线依赖性意味着与该spring资源的Dependesson
关系?我建议遵循此答案,以便@Index
注释可以在不需要此选项的情况下工作。