首页 > 数据库 >SpringBoot整合MongoDB

SpringBoot整合MongoDB

时间:2024-08-25 20:21:40浏览次数:11  
标签:SpringBoot MongoDB 查询 Person 文档 整合 Criteria query Query

目录

什么是MongoDB?

MongoDB是一种开源的 分布式文档型数据库管理系统 ,它使用类似于JSON的BSON格式(Binary JSON)来存储数据。

MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。

  • 数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。
  • 集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
  • 文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组:
文档
使用场景:

使用场景
网站数据存储游戏开发
物流与电商社交网络
内容管理系统视频直播和流媒体
缓存系统大数据分析

Spring Boot整合MongoDB

  • 引用依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  • 配置连接信息
# MongoDB连接信息
# 配置IP
spring.data.mongodb.host = 192.168.23.27  
# 配置端口号
spring.data.mongodb.port = 27017
# 定义连接的数据库名
spring.data.mongodb.database = mall
#用于控制MongoDB数据库是否自动创建索引。
spring.data.mongodb.auto-index-creation = true
  • 定义实体类Person
@Document(collection = "person") // 指定集合名称,就是类似mysql的表,如果不指定就以类名称作为集合名称
@Data
public class Person {
    @Id // 文档id, 很重要,类似mysql表的主键
    private String id;
    private String name;
    private Integer age;
}

使用MongoDB

1.新增文档

注入MongoDb操作类,其中封装DML、DQL等操作

@Autowired
private MongoTemplate mongoTemplate;

添加单条数据:

//填充数据
 Person person =new Person();
        person.setId("1");
        person.setName("张三");
        person.setAge(26);
//插入数据        
mongoTemplate.insert(person);

添加多条数据:

List<Person> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
    Person person = new Person();
    person.setName("张三" + i);
    person.setAge(20+i);
    list.add(person);
}
//批量添加数据
Collection<Person> people = mongoTemplate.insertAll(list);

存储文档,如果没有该数据就插入,否则更新数据:

/**
* 存储文档,如果没有该数据就插入,否则更新数据
* 在存储文档的时候会通过主键 ID 进行判断,如果存在就更新,否则就插入
*/
@Test
public void save() throws Exception {
//填充数据
 Person person =new Person();
        person.setId("1");
        person.setName("张三");
        person.setAge(26);
//存储数据
mongoTemplate.save(person);
}

2.修改文档

根据条件修改数据:

//设置修改条件
Query query = new Query();
Criteria criteria = Criteria.where("name").is("张三");
query.addCriteria(criteria);
//设置修改的数据
Update update = new Update();
update.set("name", "李四");
//执行修改操作
UpdateResult updateResult = template.updateFirst(query, update, Person.class);

3.删除文档

删除指定文档:

//设置删除条件
Query query = new Query();
Criteria name = new Criteria().and("name").is("张三1");
Criteria age = new Criteria().and("age").is(26);
query.addCriteria(name);
query.addCriteria(age);
//执行删除操作
Person person = mongoTemplate.findAndRemove(query, Person.class);

删除符合条件的所有文档,并返回删除的文档:

// 使用 in 删除 符合条件的多条文档,并返回
Query query = new Query(Criteria.where("id").in(1,2,3));
List<Person> result = mongoTemplate.findAllAndRemove(query, Person.class);

4.查询文档

MongoDB 支持的多种操作符:
在这里插入图片描述
查询集合中的全部文档数据:

List<Person> result = mongoTemplate.findAll(Person.class);

查询集合中指定的ID文档数据:

Person result = mongoTemplate.findById("1", Person.class);

根据条件查询集合中符合条件的文档,返回第一条数据:

//查询name是"张三3"的Person
Query query = new Query(Criteria.where("name").is("张三3"));
Person result = mongoTemplate.findOne(query, Person.class);

根据条件查询所有符合条件的文档:

//查询age大于18的Person
Query query = new Query(Criteria.where("age").gt(18));
List<Person> result = mongoTemplate.find(query, Person.class);

据【AND】关联多个查询条件,查询集合中所有符合条件的文档数据:

// 创建条件
Criteria name = Criteria.where("name").is("张三");
Criteria age = Criteria.where("age").is(18);
// 创建条件对象,将上面条件进行 AND 关联    where  name='张三' and age = 18
Criteria criteria = new Criteria().andOperator(name, age);
// 创建查询对象,然后将条件对象添加到其中
Query query = new Query(criteria);
List<Person> result = mongoTemplate.find(query, Person.class);
System.out.println("查询结果:" + result.toString());

根据【OR】关联多个查询条件,查询集合中的文档数据:

// 创建条件
Criteria criteriaUserName = Criteria.where("name").is("张三");
Criteria criteriaPassWord = Criteria.where("age").is(22);
// 创建条件对象,将上面条件进行 OR 关联  where  name='张三' or age = 22
Criteria criteria = new Criteria().orOperator(criteriaUserName, criteriaPassWord);
// 创建查询对象,然后将条件对象添加到其中
Query query = new Query(criteria);
List<Person> result = mongoTemplate.find(query, Person.class);
System.out.println("查询结果:" + result.toString());

根据【IN】关联多个查询条件,查询集合中的文档数据:

// 设置查询条件参数
List<Long> ids = Arrays.asList("1", "2", "3");
// 创建条件
Criteria criteria = Criteria.where("id").in(ids);
// 创建查询对象,然后将条件对象添加到其中
Query query = new Query(criteria);
List<Person> result = mongoTemplate.find(query, Person.class);
System.out.println("查询结果:" + result.toString());

根据【逻辑运算符】查询集合中的文档数据:

// 设置查询条件参数
int min = 20;
int max = 35;
Criteria criteria = Criteria.where("age").gt(min).lte(max);
// 创建查询对象,然后将条件对象添加到其中
Query query = new Query(criteria);
List<Person> result = mongoTemplate.find(query, Person.class);
System.out.println("查询结果:" + result.toString());

根据【正则表达式】查询集合中的文档数据:

// 设置查询条件参数
String regex = "^张";
Criteria criteria = Criteria.where("name").regex(regex);
// 创建查询对象,然后将条件对象添加到其中
Query query = new Query(criteria);
List<Person> result = mongoTemplate.find(query, Person.class);
System.out.println("查询结果:" + result.toString());

5.创建索引

创建升序索引:

// 设置字段名称
String field = "age";
// 创建索引
mongoTemplate.getCollection("person").createIndex(Indexes.descending(field));

根据索引名称移除索引:

// 设置字段名称
String field = "age_1";
// 删除索引
mongoTemplate.getCollection("person").dropIndex(field);

查询集合中所有的索引:

// 获取集合中所有列表
ListIndexesIterable<Document> indexList = mongoTemplate.getCollection("person").listIndexes();
// 获取集合中全部索引信息
for (Document document : indexList) {
    System.out.println("索引列表:" + document);
}

标签:SpringBoot,MongoDB,查询,Person,文档,整合,Criteria,query,Query
From: https://blog.csdn.net/qq_57036151/article/details/141363145

相关文章