mongo判断某些字段上有没有索引,进行动态创建
IndexOptions:
private boolean background;
private boolean unique;
private String name;
private boolean sparse;
private Long expireAfterSeconds;
private Integer version;
private Bson weights;
private String defaultLanguage;
private String languageOverride;
private Integer textVersion;
private Integer sphereVersion;
private Integer bits;
private Double min;
private Double max;
private Double bucketSize;
private Bson storageEngine;
private Bson partialFilterExpression;
private Collation collation;
private Bson wildcardProjection;
private boolean hidden;
IndexOperations animals = mongoTemplate.indexOps("animals");
List<IndexInfo> indexInfo = animals.getIndexInfo();
for (IndexInfo index:indexInfo){
List<IndexField> indexFields = index.getIndexFields();
//索引名称
String name = index.getName();
for (IndexField indexField : indexFields) {
//有索引的字段
String key = indexField.getKey();
//索引所在的字段不为空,并且与我们想要的目标字段不相等
if(Objects.isNull(key)&&key.equals("目标字段")){
//在这里给目标字段设置索引 然后跳出循环即可
/**
* IndexOptions indexOptions = new IndexOptions();
* //后台创建索引
* indexOptions.background(true);
* //唯一索引
* // indexOptions.unique(true);
* //如果为true,则索引仅引用具有指定字段的文档
* // indexOptions.sparse(true);
* mongoTemplate.createCollection("animals")
* .createIndex(Indexes.ascending("name"),
* indexOptions);
*/
break;
}
}
// Optional<Document> collation = index.getCollation();
}
如果某个字段不存在,就添加一个字段然后在建索引
Query query = new Query();
Criteria criteria = new Criteria();
criteria.and("phone").in("collect");
query.addCriteria(criteria);
Update update=new Update();
update.set("like", "业余");
mongoTemplate.upsert(query, update, "animals");
这里使用like作为待新增的字段,然后调用上述,方法在进行给字段加索引
运行中添加索引,这里是个唯一索引为实例
Index index = new Index().on("field1", Sort.Direction.ASC).unique();
mongoTemplate.indexOps("animals").ensureIndex(index);
一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰