Mongodb使用spring数据jpa

时间:2018-02-02 10:02:25

标签: java spring mongodb spring-data-mongodb

我有一个mongodb集合,需要在某个进程开始之前进行清理,我使用mongoTemplate.dropCollection()方法执行此操作,因为它比使用存储库中的deleteAll()方法快得多。

当我引入索引时出现问题,我的模型注释如下:

@Document
public class TestModel {
    @Indexed
    private String testField;
}

和存储库

public interface TestModelRepository extends MongoRepository<TestModel, String> {
}

这可确保在应用程序启动时创建索引

我注意到通过使用存储库的deleteAll()方法而不是删除集合来保留索引,但我想知道是否有一种方法可以使用spring-data来确保在插入时索引就位。

还可以理解在删除后基于带注释的模型重新创建索引的任何方法。

类似

mongoTemplate.createIndexes( TestModel.class );

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:3)

没有像这样的方法

mongoTemplate.createIndexes( TestModel.class );

在删除之前,只需获取indexInfo并在删除集合后重新创建索引。

List<IndexInfo> indexInfo = mongoTemplate.indexOps(TestModel.class).getIndexInfo();

mongoTemplate.dropCollection(TestModel.class);


indexInfo.forEach(index -> {
  DBObject indexOptions = new BasicDBObject();

  if(! index.getName().equals("_id_"))
  {
    indexOptions.put(index.getName(), 1);
    CompoundIndexDefinition indexDefinition = new CompoundIndexDefinition(indexOptions);
    indexDefinition.named(index.getName());
    mongoTemplate.indexOps(TestModel.class).ensureIndex(indexDefinition);
  }
});