使用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

回到顶部