使用spring data mongo MongoTemplate 插入数据时 手动指定集合名称时,索引不会自动创建?-灵析社区

北北che

使用 MongoTemplate 插入数据时 手动指定集合名称时,索引不会自动创建 public void save(DatapointData data) { mongoTemplate.insert(data, data.getPid()); } public Collection insert(Collection 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));

阅读量:10

点赞量:0

问AI
插入数据之前或者之后: public void save(DatapointData data) { String collectionName = data.getPid(); // 保证集合的索引存在 ensureIndexes(DatapointData.class, collectionName); // 插入数据 mongoTemplate.insert(data, collectionName); } public void ensureIndexes(Class 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(); } }