在 Spring 中从 MongoDB 中删除索引

Ahm*_*maz 2 spring mongodb spring-data-mongodb spring-boot

我正在尝试从之前放置的数据库中删除索引。

@Indexed(unique = true)
private String name;
Run Code Online (Sandbox Code Playgroud)

删除 后@Indexed(unique = true),我也需要将其从 中删除MongoDB。我需要在春季内完成。@PostConstruct我可以用什么东西来做吗?

gme*_*r.m 6

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

Spring应用程序启动期间有多种执行代码的方式。更多方法可以在这里找到:running-setup-logic-on-startup-in-spring


Ahm*_*maz 5

我使用@PostConstruct 解决了这个问题。当应用程序初始化时,我确实使用 MongoTemplates 删除了索引。代码是这样的:

    @PostConstruct
    private void removeIndex() {
        IndexOperations indexOperations = mongoTemplate.indexOps(YourEntity.class);
        Optional<IndexInfo> indexInfo = indexOperations.getIndexInfo().stream().filter(i->i.getName().contains("name_")).findFirst();
        if(indexInfo.isPresent()) {
            indexOperations.dropIndex("name");
        }
    }
Run Code Online (Sandbox Code Playgroud)