Удаление индекса из MongoDb весной - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь удалить индекс из database, который я поместил ранее.

@Indexed(unique = true)
private String name;

После удаления @Indexed(unique = true) мне нужно удалить его и из MongoDB. И мне нужно сделать это в пределах Spring. Могу ли я сделать это с @PostConstruct или что-то ?.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Spring-Data MongoTemplate имеет метод, который дает вам IndexOperations для коллекции, которая позволяет создавать и удалять индексы коллекции.

Внимание: Согласно документации db.collection.dropIndex () удаление индекса блокирует всю коллекцию до тех пор, пока она не будет отброшена, и все запросы, использующие индекс, будут убит.

Вот пример, который удаляет индекс «имя» из коллекции «продукты» при запуске приложения.

@Component
class IndexManager implements InitializingBean {

    private MongoTemplate mongoTemplate;

    public IndexManager(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @Override
    public void afterPropertiesSet() {
        mongoTemplate.indexOps("products").dropIndex("name");
    }
}

Существует несколько способов выполнения кода во время запуска весеннего приложения. Другие способы сделать это можно найти здесь: running-setup-logi c -on-startup-in-spring

0 голосов
/ 07 апреля 2020

Я решаю это с помощью @PostConstruct. Во время инициализации приложения я удалил индекс с помощью MongoTemplates. Код выглядит так:

    @PostConstruct
    private void removeIndex() {
        IndexOperations indexOperations = mongoTemplate.indexOps(YourEntity.class);
        Optional<IndexInfo> indexInfo = indexOperations.getIndexInfo().stream().filter(i->i.getName().equals("name")).findFirst();
        if(indexInfo.isPresent()) {
            indexOperations.dropIndex("name");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...