使用spring data mongo MongoTemplate 插入数据时 手动指定集合名称时,索引不会自动创建?
使用 MongoTemplate 插入数据时 手动指定集合名称时,索引不会自动创建
public void save(DatapointData data) { mongoTemplate.insert(data, data.getPid());
}
public <T> Collection<T> insert(Collection<? extends T> batchToSave, String collectionName) { Assert.notNull(batchToSave, "BatchToSave must not be null!");
Assert.notNull(collectionName, "CollectionName must not be null!");
return this.doInsertBatch(collectionName, batchToSave, this.mongoConverter);
}
package com.chico.client.iot.entity;import java.io.Serializable;
import lombok.Data;
import org.springframework.data.mongodb.core.index.IndexDirection;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* 数据点数据上报表
*
*/
@Data
@Document(collection = "datapoint_data")
public class DatapointData implements Serializable {
private static final long serialVersionUID = 1765700798800606339L;
/**
* 设备id
*/
@Indexed
private String devId;
/**
* 产品id
*/
private String pid;
/**
* 功能点的code
*/
@Indexed
private String identifier;
/**
* 功能点的值
*/
private String value;
/**
* 时间
*/
@Indexed(direction = IndexDirection.DESCENDING)
private Long time;
}
@Document(collection = "datapoint_data") 注解中这个集合能够正常创建。
但是mongodb中存的是物联网数据,集合名是使用的pid,方便管理
有没有方法能让mongodb 自动创建索引
补充:如下方法是能创建索引的,但是不太想用这种方式
mongoTemplate.indexOps(pid).ensureIndex(new Index().on("time", Sort.Direction.DESC));
回答:
插入数据之前或者之后:
public void save(DatapointData data) { String collectionName = data.getPid();
// 保证集合的索引存在
ensureIndexes(DatapointData.class, collectionName);
// 插入数据
mongoTemplate.insert(data, collectionName);
}
public <T> void ensureIndexes(Class<T> entityClass, String collectionName) {
IndexOperations indexOps = mongoTemplate.indexOps(collectionName);
indexOps.ensureIndexes(entityClass);
}
建一个MongoIndexCreator类:
import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.index.IndexOperations;
import org.springframework.stereotype.Component;
@Component
public class MongoIndexCreator {
private final MongoTemplate mongoTemplate;
public MongoIndexCreator(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
public void createIndexes() {
// 创建DatapointData集合的索引
IndexOperations indexOps = mongoTemplate.indexOps(DatapointData.class);
indexOps.ensureIndexes();
}
}
Spring Boot应用程序启动时候调这个方法:
import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;
@Component
public class IndexInitializerRunner implements CommandLineRunner {
private final MongoIndexCreator mongoIndexCreator;
public IndexInitializerRunner(MongoIndexCreator mongoIndexCreator) {
this.mongoIndexCreator = mongoIndexCreator;
}
@Override
public void run(String... args) throws Exception {
mongoIndexCreator.createIndexes();
}
}
以上是 使用spring data mongo MongoTemplate 插入数据时 手动指定集合名称时,索引不会自动创建? 的全部内容, 来源链接: utcz.com/p/945361.html