Spring Boot 2.3.0 - Библиотека MongoDB не создает индексы автоматически

Я предоставил образец проекта, чтобы прояснить эту проблему: https://github.com/nmarquesantos/spring-mongodb-reactive-indexes

Согласно документации Spring mongo db (https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mapping-usage):

the @Indexed annotation tells the mapping framework to call createIndex(…) on that property of your document, making searches faster. Automatic index creation is only done for types annotated with @Document.

В моем классе Player мы можем наблюдать как аннотации @Document, так и @Indexed:

@Document
public class Player {

@Id
private String id;

private String playerName;

@Indexed(name = "player_nickname_index", unique = true)
private String nickname;


public Player(String playerName, String nickname) {
    this.id = UUID.randomUUID().toString();
    this.playerName = playerName;
    this.nickname = nickname;
}

public String getPlayerName() {
    return playerName;
}

public void setPlayerName(String playerName) {
    this.playerName = playerName;
}

public String getNickname() {
    return nickname;
}

public void setNickname(String nickname) {
    this.nickname = nickname;
}
}`

И в моем классе приложения я вставляю один элемент, чтобы проверить, что база данных успешно заполнена:

@PostConstruct
public void seedData() {
    var player = new Player("Cristiano Ronaldo", "CR7");

    playerRepository.save(player).subscribe();

}

Если я проверю MongoDb после запуска приложения, я увижу коллекцию и успешно созданный элемент.

Уникальный индекс для псевдонима не создается. Я вижу только индекс, созданный для атрибута @Id. Я что-нибудь упускаю? Я неправильно истолковал документацию?


person nmmsantos    schedule 05.06.2020    source источник
comment
вы пытались установить имя индекса? @Indexed(name = "nick_name_index"). Также вы пробовали сохранять дубликаты в тестовый индекс?   -  person Alex    schedule 05.06.2020
comment
да, дубликаты сохранены, и да, я пробовал с именем, без разницы. те же проблемы. каждый раз, когда я перезапускаю приложение, добавляется новая запись с теми же значениями.   -  person nmmsantos    schedule 05.06.2020
comment
Я обновил свой образец, добавив имя в индекс.   -  person nmmsantos    schedule 05.06.2020


Ответы (2)


Версия Spring Data MongoDB поставляется с Spring Boot 2.3.0.RELEASE - это 3.0.0.RELEASE. Начиная с Spring Data MongoDB 3.0, автоматический -индекс по умолчанию отключен.

Чтобы включить автоматическое создание индекса, установите spring.data.mongodb.auto-index-creation = true или, если у вас есть пользовательская конфигурация Mongo, переопределить метод autoIndexCreation

@Configuration
public class CustomMongoConfig extends AbstractMongoClientConfiguration {

  @Override
  public boolean autoIndexCreation() {
    return true;
  }

  // your other configuration
}
person yejianfengblue    schedule 05.06.2020

Я столкнулся с этой проблемой при обновлении версии весенней загрузки до 2.3.x и переопределении этого метода в классе конфигурации решило ее (что @yejianfengblue сказал выше)

  @Override
  public boolean autoIndexCreation() {
    return true;
  }
person atilla8huno    schedule 07.09.2020