下面示例显示了怎样去创建一个集合:
MongoCollection<Document> collection = null; // 判断 MyNewCollection 集合是否存在 if (!mongoTemplate.getCollectionNames().contains("MyNewCollection")) { // 如果 MyNewCollection 集合不存在,则创建该集合 collection = mongoTemplate.createCollection("MyNewCollection"); } // 删除集合 mongoTemplate.dropCollection("MyNewCollection");
下面列出了关于集合管理的方法:
获取集合信息
Set<String> getCollectionNames() 获取所有集合名称
com.mongodb.client.MongoCollection<org.bson.Document> getCollection(String collectionName) 按名称获取MongoCollection。
String getCollectionName(Class<?> entityClass) 根据 Class 获取对应的集合名称
判断集合是否存在
<T> boolean collectionExists(Class<T> entityClass) 检查是否存在具有由实体类指示的名称的集合。
boolean collectionExists(String collectionName) 检查是否存在具有给定名称的集合。
创建集合
<T> com.mongodb.client.MongoCollection<org.bson.Document> createCollection(Class<T> entityClass) 使用基于提供的实体类的名称创建无上限集合。
<T> com.mongodb.client.MongoCollection<org.bson.Document> createCollection(Class<T> entityClass, CollectionOptions collectionOptions) 使用选项创建具有基于提供的实体类的名称的集合。
com.mongodb.client.MongoCollection<org.bson.Document> createCollection(String collectionName) 使用提供的名称创建无上限集合。
com.mongodb.client.MongoCollection<org.bson.Document> createCollection(String collectionName, CollectionOptions collectionOptions) 使用提供的名称和选项创建集合。
删除集合
<T> void dropCollection(Class<T> entityClass) 使用实体类指示的名称删除集合。
void dropCollection(String collectionName) 删除具有给定名称的集合。
(1)application.properties 配置文件
# Log logging.level.root=debug # MongoDB spring.data.mongodb.uri=mongodb://localhost:27017/test
(2)AppConfig.java 配置类,配置 MongoTemplate 对象
import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.MongoDatabaseFactory; import org.springframework.data.mongodb.core.MongoTemplate; /** * 配置 MongoTemplate * @author hxstrive.com 2022/12/23 */ @Slf4j @Configuration public class AppConfig { @Bean public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDatabaseFactory) { log.info("mongoTemplate({}, {})", mongoDatabaseFactory); return new MongoTemplate(mongoDatabaseFactory); } }
(3)集合 person 对应的实体
import lombok.Builder; import lombok.Data; import lombok.ToString; @Data @ToString @Builder public class Person { /** 用户ID */ private int id; /** 用户姓名 */ private String name; /** 年龄 */ private int age; }
(4)客户端代码,说明见注释。
import com.hxstrive.springdata.mongodb.entity.Person; import com.mongodb.client.MongoCollection; import org.bson.Document; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.mongodb.core.MongoTemplate; import java.util.Set; /** * 集合管理示例 * @author hxstrive.com */ @SpringBootTest public class CollectionManagementDemo { @Autowired private MongoTemplate mongoTemplate; @Test public void contextLoads() { // 创建集合,先判断集合是否存在 if(!mongoTemplate.getCollectionNames().contains("person")) { MongoCollection<Document> result = mongoTemplate.createCollection(Person.class); System.out.println(result); // 结果: // com.mongodb.client.internal.MongoCollectionImpl@6cfbbff7 } if(!mongoTemplate.collectionExists("myPerson")) { MongoCollection<Document> result = mongoTemplate.createCollection("myPerson"); System.out.println(result); // 结果: // com.mongodb.client.internal.MongoCollectionImpl@136ccbfe } // 获取当前数据库下面所有的集合名称 Set<String> collectionNames = mongoTemplate.getCollectionNames(); for(String collectionName : collectionNames) { System.out.println(collectionName); // 结果: // myPerson // person } // 删除集合 for(String collectionName : collectionNames) { mongoTemplate.dropCollection(collectionName); } } }