下面示例显示了怎样去创建一个集合:
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);
       }
   }
}
            