晚上搜了一下相关代码,不是互相抄瞎写就是答非所问,只好自己摸索着写一下,修改之后那这篇文章记录一下,免得以后遗忘。
我是在springboot项目中创建了一个类,需要创建索引的时候,在Test里写个函数跑一边就可以了。
package com.sohu.umab.usercenter.service.impl;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.IndexInfo;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
/**
* 给mongo数据库创建索引
*/
@Repository
public class CreateMongoIndex {
@Resource
private MongoTemplate mongoTemplate;
/**
* 创建单个索引或者联合索引
*
* @param index_key 索引的名称,支持多个索引一起创建联合索引
* @param collectionName 集合名称
* @return
*/
public boolean createInboxIndex(String collectionName, String... index_key) {
boolean success = true;
try {
Index index = new Index();
for (int i=0;i<index_key.length;i++){
index.on(index_key[i],Sort.Direction.ASC);
}
mongoTemplate.indexOps(collectionName).ensureIndex(index);
} catch (Exception ex) {
success = false;
}
return success;
}
/**
* 获取现有索引集合
*
* @return
*/
public List<IndexInfo> getInboxIndex(String collectionName) {
List<IndexInfo> indexInfoList = mongoTemplate.indexOps(collectionName).getIndexInfo();
return indexInfoList;
}
/**
* 删除索引
*
* @param indexName 索引的名称
* @param collectionName 集合名称
* @return
*/
public boolean deleteInboxIndex(String indexName, String collectionName) {
boolean success= true;
try {
mongoTemplate.indexOps(collectionName).dropIndex(indexName);
} catch (Exception ex) {
success= false;
}
return success;
}
/**
* 获取mongo中数据集合的名称
*/
public Set<String> getNames(){
Set<String> res = mongoTemplate.getCollectionNames();
return res;
}
}