Я предоставил образец проекта, чтобы прояснить эту проблему: 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. Я что-нибудь упускаю? Я неправильно истолковал документацию?
@Indexed(name = "nick_name_index")
. Также вы пробовали сохранять дубликаты в тестовый индекс? - person Alex   schedule 05.06.2020