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);
一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰