微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-Mongodb在使用Spring Data JPA的插入中强制存在索引

我有一个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 );

我怎样才能做到这一点?

解决方法:

没有这样的方法

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);
  }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐