@CompoundIndex在Spring Data MongoDB中不起作用

我正在使用Spring Data MongoDB开发一个应用程序。我想在我的一个模型上创建一个复合索引。我在顶部添加了一个@CompoundIndex注释,如下所示:

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

}

但是,不会创建索引。我也尝试过直接将类放在类的上方。集合仍然缺少索引。相同的索引定义在创建时工作正常,如下所示:@CompoundIndex

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

我更喜欢使用基于注释的索引定义。任何想法为什么这不起作用?


答案 1

您需要将以下内容添加到 :application.properties

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

或 :application.yml

spring:
  data:
    mongodb:
      auto-index-creation: true

答案 2

在这种情况下,我宁愿使用mongodb createIndex方法,因为它可以确保索引已经创建,即使您在应用程序模型中创建了索引(在本例中为Spring boot),最好进行双重检查并手动创建它们 https://docs.mongodb.com/v3.2/reference/method/db.collection.createIndex/