MongoDB的安装和使用

1.MongoDB 安装

1.1 基于Docker安装

docker run --restart=always -d --name mongo -v /opt/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6

1.2 客户端工具使用

MongoDB Compass | MongoDB

2.MongoDB 使用

2.1 引用依赖包

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>

2.2 配置文件配置mongodb资料

# MongoDB连接信息
spring.data.mongodb.host = 192.168.23.27
spring.data.mongodb.port = 27017
spring.data.mongodb.database = mallspring.data.mongodb.auto-index-creation = true

2.3 准备对象Person

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "205_person")
//用于指定集合,如果不指定则会默认集合为当前类名
public class Person {// @Id //用于指定Id,若有该字段,则mongodb默认为model中的id为MongoDB中的idprivate  Integer id ;private  String name;private  Integer age;private  String phone;@Indexed(expireAfterSeconds = 10) //必须结合spring.data.mongodb.auto-index-creation = true和@Document注解一起使用private LocalDateTime creatTime;
}

2.4新增文档

package com.by;import cn.hutool.core.date.LocalDateTimeUtil;
import com.by.model.Person;
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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@SpringBootTest
class InsertTests {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid test() {Person person = Person.builder().id(1).name("张").age(18).phone("188744456223").build();mongoTemplate.insert(person);}@Test//指定集合名称进行插入205_personvoid test2() {Person person = Person.builder().id(2).name("张").age(18).phone("188744456223").build();mongoTemplate.insert(person,"205_person");}@Test//指定集合名称进行插入205_personvoid test3() {Person person = Person.builder().id(3).name("张").age(18).phone("188744456223").build();mongoTemplate.insert(person,"205_person");}@Testvoid test4() {Person person = Person.builder().id(2).name("张").age(18).phone("188744456223").build();mongoTemplate.save(person,"205_person");}@Test //批量插入void test5() {List<Person> list =new ArrayList<>();for (int i = 1; i <= 10; i++) {Person person = Person.builder().id(i).name("张"+i).age(i).phone("188744456223").build();list.add(person);}mongoTemplate.insertAll(list);}@Test //测试索引的过期时间void test6() {//   Person person = Person.builder().id(11).name("张").age(38).phone("188744456223").creatTime(LocalDateTime.now()).build();//   mongoTemplate.save(person);}@Test //测试索引的过期时间void test8() {//  Person person = Person.builder().id(112).name("张").age(38).phone("188744456223").creatTime(LocalDateTime.now()).build();//  mongoTemplate.insert(person);}@Test //使用save命令void test7() {Person person = Person.builder().id(1).name("张--大爷").age(38).phone("188744456223").build();mongoTemplate.save(person,"person");}}

2.5修改文档

package com.by;import cn.hutool.core.date.LocalDateTimeUtil;
import com.by.model.Person;
import com.mongodb.client.result.UpdateResult;
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 org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@SpringBootTest
class UpdateTests {@Autowiredprivate MongoTemplate mongoTemplate;@Test //更新满足条件的第一条数据void test() {Query query =new Query(Criteria.where("id").is(1));Update update=new Update().set("age",38);mongoTemplate.updateFirst(query,update,Person.class);}@Test //批量更新年龄大于10的void test2() {Query query =new Query(Criteria.where("age").gte(10));Update update=new Update().set("age",38);mongoTemplate.updateMulti(query,update,Person.class);}@Test //使用正则表达式修改姓张的年龄void test3() {Query query =new Query(Criteria.where("name").regex("^张"));Update update=new Update().set("age",48);UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Person.class);}}

2.6删除文档

package com.by;import com.by.model.Person;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
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 org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;@SpringBootTest
class DeleteTests {@Autowiredprivate MongoTemplate mongoTemplate;@Test //删除满足条件的第一条数据void test() {Query query =new Query(Criteria.where("id").is(2));DeleteResult remove = mongoTemplate.remove(query,Person.class);}@Test //删除满足条件的第一条数据void test2() {Query query =new Query(Criteria.where("name").regex("3$"));DeleteResult remove = mongoTemplate.remove(query,Person.class);}@Test //删除满足条件的第一条数据void test3() {Query query =new Query(Criteria.where("id").in(4,5,6));DeleteResult remove = mongoTemplate.remove(query,Person.class);}@Test //删除满足条件的数据void test4() {Query query =new Query(Criteria.where("id").in(7,8,9));DeleteResult remove = mongoTemplate.remove(query,Person.class,"205_person");}@Test //删除满足条件的数据void test5() {Query query =new Query(Criteria.where("name").regex("^张"));DeleteResult remove = mongoTemplate.remove(query,Person.class,"205_person");}}

2.7查询文档

package com.by;import com.by.model.Person;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;import java.util.List;@SpringBootTest
class SelectTests {@Autowiredprivate MongoTemplate mongoTemplate;@Test //查询所有数据void test() {List<Person> all = mongoTemplate.findAll(Person.class);}@Test //查询指定数据void test2() {Query query =new Query(Criteria.where("name").is("张3"));List<Person> list = mongoTemplate.find(query, Person.class);}@Test //查询所有数据void test3() {Query query =new Query(Criteria.where("name").is("张3"));List<Person> list = mongoTemplate.find(query, Person.class,"205_person");}@Test //查询所有数据void test4() {Query query =new Query(Criteria.where("name").is("张3"));List<Person> allAndRemove = mongoTemplate.findAllAndRemove(query, Person.class);}@Test //查询所有数据void test5() {Query query =new Query(Criteria.where("age").gte(2).lte(5));List<Person> list = mongoTemplate.find(query, Person.class);}@Test //用and关联多个查询条件void test6() {Criteria name =new Criteria("name").regex("^张");Criteria age  = new Criteria("age").gte(5);//创建条件对象,用and 进行关联Criteria criteria =new Criteria().andOperator(name,age);Query query=new Query(criteria);List<Person> list = mongoTemplate.find(query, Person.class);}@Test //用or关联多个查询条件void test7() {Criteria name =new Criteria("name").regex("^张");Criteria age  = new Criteria("age").gte(5);//创建条件对象,用and 进行关联Criteria criteria =new Criteria().orOperator(name,age);Query query=new Query(criteria);List<Person> list = mongoTemplate.find(query, Person.class);}@Test //用in关联多个查询条件void test8() {Query query=new Query(Criteria.where("age").in(4,5,6));List<Person> list = mongoTemplate.find(query, Person.class);}@Test //使用正则表达式void test9() {Query query=new Query(Criteria.where("name").regex("7$"));List<Person> list = mongoTemplate.find(query, Person.class);}@Test //区间查询void test10() {Query query=new Query(Criteria.where("age").gte(5).lte(8));List<Person> list = mongoTemplate.find(query, Person.class);}@Test //降序排序void test11() {Query query=new Query(Criteria.where("age").gte(5).lte(8)).with(Sort.by(Sort.Order.desc("age")));List<Person> list = mongoTemplate.find(query, Person.class);}@Test //降序排序void test12() {Query query =new Query( Criteria.where("age").gte(5).lte(8)).with(Sort.by(Sort.Order.asc("age")));List<Person> list = mongoTemplate.find(query, Person.class);}}

2.8创建索引

package com.by;import com.by.model.Person;
import com.mongodb.client.ListIndexesIterable;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.result.UpdateResult;
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 org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;@SpringBootTest
class IndexTests {@Autowiredprivate MongoTemplate mongoTemplate;@Test //更新满足条件的第一条数据void test() {//创建升序索引String index = mongoTemplate.getCollection("205_person").createIndex(Indexes.ascending("name"));//创建降序索引String name = mongoTemplate.getCollection("205_person").createIndex(Indexes.descending("name"));}@Test //删除索引void test2() {mongoTemplate.getCollection("205_person").dropIndex("name_-1");}@Test //查看所有索引void test3() {ListIndexesIterable<Document> documents = mongoTemplate.getCollection("205_person").listIndexes();for (Document document :documents) {System.out.println("索引列表"+document);}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信号完整性的常见术语概念(面试常用)

目录 术语 概念一览 1&#xff0e;信号完整性&#xff08;Signal Integrity&#xff09; 2&#xff0e;传输线&#xff08;Transmission Line&#xff09; 3&#xff0e;特性阻抗&#xff08;Characteristic Impedance&#xff09; 4&#xff0e;反射&#xff08;Reflecti…

【环境搭建】ubuntu工作站搭建全流程(显卡4090)

安装ubuntu22.04系统 首先&#xff0c;先压缩windows分区&#xff0c;按住Win X快捷键&#xff0c;选择磁盘管理,压缩分区&#xff0c;压缩出新的分区用于安装ubuntu22.04 windows插入系统盘&#xff0c;点击重启&#xff0c;一直按F12,选择系统盘启动方式语言选择chinese–…

[react优化] 避免组件或数据多次渲染/计算

代码如下 点击视图x➕1,导致视图更新, 视图更细导致a也重新大量计算!!这很浪费时间 function App() {const [x, setX] useState(3)const y x 2console.log(重新渲染, x, y);console.time(timer)let a 0for (let index 0; index < 1000000000; index) {a}console.timeE…

【小红书校招场景题】12306抢票系统

1 坐过高铁吧&#xff0c;有抢过票吗。你说说抢票系统对于后端开发人员而言会有哪些情况&#xff1f; 对于后端开发人员来说&#xff0c;开发和维护一个高铁抢票系统&#xff08;如中国的12306&#xff09;会面临一系列的挑战和情况。这些挑战主要涉及系统的性能、稳定性、数据…

用ansys q3d提取pcb板上的寄生参数及注意事项

需求 画好pcb板后&#xff0c;想要提取回路的寄生参数 1 保存为ad格式 因为之前图方便用立创eda画的板子&#xff0c;结果无法导出成想要的格式。因此需要将立创eda的文件导出为ad格式。立创eda的官网有相关教程。 注意事项&#xff08;只说自己遇到的问题&#xff09; 导…

Ubuntu22.04 + ROS2 Humble的环境配置

Ubuntu22.04 ROS2 Humble的环境配置 文章目录 Ubuntu22.04 ROS2 Humble的环境配置(1) Set locale(2) Setup Sources(3)安装ROS2(4)检查是否成功安装 参考官方网站ROS2-Installation ROS2的各种版本及维护计划&#xff0c;可以参考ROS2-List of Distributions (1) Set locale…

Django中的静态文件、路径、访问静态文件的方法

1.什么是静态文件 不能与服务器端做动态交互的文件都是静态文件 如:图片,css,js,音频,视频,html文件(部分) 2.静态文件配置 在 settings.py 中配置一下两项内容: 1.配置静态文件的访问路径 通过哪个url地址找静态文件 STATIC_URL ‘/static/’ 说…

独一无二:探索单例模式在现代编程中的奥秘与实践

设计模式在软件开发中扮演着至关重要的角色&#xff0c;它们是解决特定问题的经典方法。在众多设计模式中&#xff0c;单例模式因其独特的应用场景和简洁的实现而广受欢迎。本文将从多个角度详细介绍单例模式&#xff0c;帮助你理解它的定义、实现、应用以及潜在的限制。 1. 什…

华为OD-C卷-结队编程[200分]

题目描述 某部门计划通过结队编程来进行项目开发, 已知该部门有 N 名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程, 结队分组规则如下: 从部门中选出序号分别为 i、j、k 的3名员工,他们的职级分别为 level[i],level[j],level[k], 结队小组满…

FreeRTOS基本介绍

RTOS&#xff0c;Real Time Operating System&#xff0c;实时操作系统&#xff0c;是指具有实时性、能支持实时控制系统工作的操作系统。 它&#xff08;RTOS&#xff09;的首要任务是调动所有资源完成实时控制任务的工作&#xff08;确保实时性&#xff09;&#xff0c;其次才…

数据结构篇1—《顺序表》

文章目录 &#x1f6a9;前言1. 数据结构的概念2. 数据结构的分类3. 顺序表3.1. 顺序表的分类&#xff08;1&#xff09;静态顺序表&#xff08;2&#xff09;动态顺序表 4. 动态顺序表实现4.1. 实现步骤&#xff08;1&#xff09;框架结构&#xff08;2&#xff09;SeqList.h头…

【八股】MySQL

面试题 知道什么是覆盖索引吗&#xff1f; 覆盖索引是指&#xff0c;查询使用的索引&#xff0c;需要返回的列&#xff0c;在该索引的叶子节点中已经能够全部找到。 简单的来说&#xff0c;覆盖索引就是查询索引后&#xff0c;已经得到了所需字段的信息&#xff0c;不需要回表…

如何准备2024年汉字小达人:18道历年考题示例和解析、备考提醒

现在距离2024年第11届汉字小达人比赛还有六个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…

linux如何使 CPU使用率保持在指定百分比?

目录 方法1&#xff1a;&#xff08;固定在100%&#xff09; 方法2&#xff1a;&#xff08;可以指定0~100%&#xff09; 方法3&#xff1a;使用ChaosBlade工具&#xff08;0~100%&#xff09; 方法1&#xff1a;&#xff08;固定在100%&#xff09; for i in seq 1 $(cat /pro…

工具01-禅道

禅道使用 禅道介绍禅道核心管理思想-敏捷方法scrum禅道功能 禅道使用 禅道介绍 禅道核心管理思想-敏捷方法scrum 理解&#xff1a;快速迭代&#xff0c;持续交付可以工作的软件项目。 禅道功能 有研发项目管理、内置需求管理、任务管理、测试用例管理、缺陷管理、计划发布等…

vscode常用插件

1. chinese&#xff08;汉化编译器&#xff09; chinese插件适用于 VS Code 的中文&#xff08;简体&#xff09;语言包&#xff0c;此中文&#xff08;简体&#xff09;语言包为 VS Code 提供本地化界面。 2、vetur&#xff08;vue 2开发必备&#xff09;volar&#xff08;vu…

Redis深入解析:HyperLogLog、Bitmap和Geospatial的奇妙应用

本文深入探讨了Redis数据库中的三种特殊数据类型&#xff1a;HyperLogLog、Bitmap和Geospatial。 HyperLogLog用于高效估算集合基数&#xff0c;牺牲小部分准确度以节省空间Bitmap提供位操作&#xff0c;适用于二元数据的高效记录与查询Geospatial处理地理位置数据&#xff0c…

【Jenkins】Jenkins自动化工具介绍

目录 技术背景常规的手动打包步骤 Jenkins简介起源与发展Jenkins的核心价值1.自动化1.1代码构建1.2测试自动化1.3自动部署 2.持续集成与持续部署CI/CD的概念如何减少集成问题更快速地发布软件版本 Jenkins优势Jenkins的主要竞争对手Travis CI:CircleCI:GitLab CI: Jenkins与其他…

SpringBoot之集成Redis

SpringBoot之集成Redis 一、Redis集成简介二、集成步骤2.1 添加依赖2.2 添加配置2.3 项目中使用 三、工具类封装四、序列化 &#xff08;正常都需要自定义序列化&#xff09;五、分布式锁&#xff08;一&#xff09;RedisTemplate 去实现场景一&#xff1a;单体应用场景二&…

vim卡死了,没有反应怎么办?

解决办法&#xff1a; 很有可能是你有个在window下的好习惯&#xff0c;没事儿就ctrl s保存文件。但是在vim里&#xff0c;ctrl s默认是发送一种流控制信号&#xff0c;通常用于停止终端的输出&#xff0c;所以你的屏幕就卡死了。 解决办法也很简单&#xff0c;按下ctrl q即…