MongoDB的搭建 和crud操作
MongoDB
docker 下载
docker run --restart=always -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6
使用navcat工具使用MongoDB
Crud操作
jar包
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
// 作用时与 MongoDB中的206_person对应
@Document("206_person")
public class Person {@Idprivate Integer id;private String name;private Integer girls;
}
导入的包,如果出现错误进行参考
import com.hb.model.Person;
import com.mongodb.client.ListIndexesIterable;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.junit.jupiter.api.Test;
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.index.Index;
import org.springframework.data.mongodb.core.index.IndexInfo;
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 javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class AppTests {@Resourceprivate MongoTemplate mongoTemplate;}
官方文档
示例均以spring boot 测试类
创建(增)
//插入@Test//插入一条数据void mongoDBInsert() {Person shuai1 = Person.builder().id(1).name("小帅").girls(10086).build();mongoTemplate.insert(shuai1);}@Test//插入多条数据void mongoDBInsertAll() {List<Person> list = new ArrayList<>();for (int i = 0; i < 10; i++) {Person shuai1 = Person.builder().id(i).name("小帅"+ i).girls(10086).build();list.add(shuai1);}mongoTemplate.insertAll(list);}
修改(改)
//更新@Test//有数据更新数据 没有数据创建数据void mongoDBSave() {Person shuai1 = Person.builder().id(1).name("小帅shuai ").girls(1008611).build();mongoTemplate.save(shuai1);}@Test//根据 条件 进行对多条数据进行更新void mongoDBUpdate() {Query query = new Query();query.addCriteria(Criteria.where("name").is("小帅"));Update update = new Update();Update id = update.set("name", "ggg");UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Person.class);System.out.println(updateResult);}@Test//根据 条件 进行数据的更新void mongoDBUpset() {Query query = new Query();//更新的条件query.addCriteria(Criteria.where("id").is(3));//更新的内容Update update = new Update();Update id = update.set("name", "ggg");//更新找到的第一个数据UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Person.class);System.out.println(updateResult);}@Test//根据 正则表达式 and 连接 条件 进行数据的更新void mongoDBUpsetMany() {Query query = new Query();Query query1 = query.addCriteria(Criteria.where("id").gt(4).and("name").regex(".*gg$"));Update update = new Update().set("name","嘎嘎");//更新找到的第一个数据UpdateResult updateResult = mongoTemplate.updateMulti(query,update,Person.class);System.out.println(updateResult);}
删除(删)
//删@Test//根据 正则表达式 and 连接 条件 进行数据的删除 不返回数据void mongoDBDelete() {Query query = new Query();Query query1 = query.addCriteria(Criteria.where("id").gt(4).and("name").regex(".*嘎嘎$"));//更新找到的第一个数据DeleteResult remove = mongoTemplate.remove(query, Person.class);System.out.println(remove);}@Test//根据 正则表达式 and 连接 条件 进行数据的删除 返回数据void mongoDBDeleteReturnOne() {Query query = new Query();Query query1 = query.addCriteria(Criteria.where("id").lt(4).and("name").regex(".*gg$"));//更新找到的第一个数据Person andRemove = mongoTemplate.findAndRemove(query, Person.class);System.out.println(andRemove);}@Test//根据 正则表达式 and 连接 条件 进行数据的删除 返回数据void mongoDBDeleteReturnAny() {Query query = new Query();Query query1 = query.addCriteria(Criteria.where("id").lt(4).and("name").regex(".*gg$"));//更新找到的第一个数据List<Person> allAndRemove = mongoTemplate.findAllAndRemove(query, Person.class);System.out.println(allAndRemove);}
读取(查)
//查@Test//找到全部void mongoDBFindAll() {List<Person> allAndRemove = mongoTemplate.findAll(Person.class);System.out.println(allAndRemove);}@Test//找到符合条件的第一个数据void mongoDBFindOne() {Query query = new Query();query.addCriteria(Criteria.where("id").in(1,2,3,4,5,6,7));//根据条件找到的第一个数据Person person= mongoTemplate.findOne(query,Person.class);System.out.println(person);}@Test//找到符合条件的第一个数据void mongoDBFindAny() {Query query = new Query();query.addCriteria(Criteria.where("id").in(1,2,3,4,5,6,7));//根据条件找到的第一个数据List<Person> people = mongoTemplate.find(query, Person.class);System.out.println(people);}@Test//找到idvoid mongoDBFindById() {//根据条件找到的第一个数据Person people = mongoTemplate.findById(3, Person.class);System.out.println(people);}@Test//找到 根据or和正则进行查找所有void mongoDBFindByOr() {Query query = new Query();query.addCriteria(Criteria.where("id").gte(4).orOperator(Criteria.where("name").regex("^小帅.*")));//根据条件找到的第一个数据List<Person> people = mongoTemplate.find(query, Person.class);System.out.println(people);}@Test// find by sort// Sort.Direction.DESC 降序排列 默认为升序// 这里需要记得order by 在limit和skip之前void mongoDBFindBySort() {Query query = new Query();query.addCriteria(Criteria.where("id").gte(4).orOperator(Criteria.where("name").regex("^小帅.*")));query.with(Sort.by(Sort.Direction.DESC,"name")).limit(2).skip(3);//根据条件找到的第一个数据List<Person> people = mongoTemplate.find(query, Person.class);System.out.println(people);}@Test// find by countvoid mongoDBCount() {Query query = new Query();query.addCriteria(Criteria.where("id").gte(4).orOperator(Criteria.where("name").regex("^小帅.*")));query.with(Sort.by(Sort.Direction.DESC,"name")).skip(3);//根据条件找到的第一个数据Long people = mongoTemplate.count(query, Person.class);System.out.println(people);}
创建索引
//索引操作@Testpublic void createAscendingIndex() {// 设置字段名称String field = "age";// 通过表名字创建索引mongoTemplate.getCollection("person").createIndex(Indexes.descending(field));//获取索引位置 Person.class 对应的 ”206_Person“int i = mongoTemplate.getCollectionName(Person.class).indexOf("age");System.out.println(i);//设置 Person对应的 206_persion 中的索引String s = mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("id", Sort.Direction.ASC));System.out.println(s);}/*** 根据索引名称移除索引*/@Testpublic void removeIndex() {// 设置字段名称String field = "age_-1";// 删除索引mongoTemplate.getCollection("person").dropIndex(field);// mongoTemplate.indexOps(Person.class).dropIndex(field);}/*** 查询集合中所有的索引*/@Testpublic void getIndexAll() {// 获取集合中所有列表 by 表名字ListIndexesIterable<Document> indexes = mongoTemplate.getCollection("person").listIndexes();// 获取索引for (Document index : indexes) {System.out.println(index.toJson());System.out.println("-----------------------------");}// 获取集合中所有列表 by 类List<IndexInfo> indexInfo = mongoTemplate.indexOps(Person.class).getIndexInfo();for (IndexInfo info : indexInfo) {System.out.println("206 " + info);}}
相关文章:

MongoDB的搭建 和crud操作
MongoDB docker 下载 docker run --restartalways -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6使用navcat工具使用MongoDB Crud操作 jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>lom…...

软件设计师考试学习1
前言 计算机组成原理及体系结构 数据的表示 进制的转换 原码反码补码移码 最高位是符号位,负数符号位为1 反码补码正数和原码一样,负数有区别 反码符号位不动,其他位置取反 补码在反码基础上加1 移码是将补码的符号为取反 在原码和反码中…...

【云计算】虚拟私有云 VPC
虚拟私有云 VPC 1.前言1.1 基本介绍1.2 VPC 的作用1.3 VPC 的适用人群 2.VPC 基本概念2.1 VPC 相关基本概念2.2 其他相关基本概念 3.VPC 通信场景3.1 VPC 内部互通3.2 VPC 间互通3.2.1 对等连接3.2.2 Transit Gateway 或者云联网 3.3 访问 Internet3.3.1 Internet 网关3.3.2 NA…...

@EventListener 监听事件 ,在同一个虚拟机中如何保证顺序执行
文章目录 前言EventListener 监听事件 ,在同一个虚拟机中如何保证顺序执行1. 设计原理2. 具体编码2.1. 编码事件监听器2.2. 制作一个生成序号方法2.3. 制作测试代码2.4. 测试结果 前言 如果您觉得有用的话,记得给博主点个赞,评论,…...

数据结构入门 — 树的概念与结构
本文属于数据结构专栏文章,适合数据结构入门者学习,涵盖数据结构基础的知识和内容体系,文章在介绍数据结构时会配合上动图演示,方便初学者在学习数据结构时理解和学习,了解数据结构系列专栏点击下方链接。 博客主页&am…...

linux驱动开发day6--(epoll实现IO多路复用、信号驱动IO、设备树以及节点和属性解析相关API使用)
一、IO多路复用--epoll实现 1.核心: 红黑树、一张表以及三个接口、 2.实现过程及API 1)创建epoll句柄/创建红黑树根节点 int epfdepoll_create(int size--无意义,>0即可)----------成功:返回根节点对应文件描述符…...

9月15日作业
Qt代码 #include "mywnd.h"//构造函数的定义 mywnd::mywnd(QWidget *parent): QWidget(parent) //显性调用父类的有参构造完成对子类从父类继承下来成员的初始化工作 {//窗口设置this->resize(QSize(500, 433));this->setWindowTitle("Widget&quo…...
关于Java多线程的那些事
多线程 多线程1. 关于多线程的理解1.1 进程和线程1.2 并行和并发1.3 线程调度 2. 创建多线程的方式创建线程有哪几种方式?2.1 通过继承Thread类来创建并启动线程的步骤如下:2.2 通过实现Runnable接口来创建并启动线程的步骤如下:2.3 通过实现…...

信息化项目验收的依据、内容和验收测评报告
随着信息系统业务覆盖率的提高和深度整合创新的逐步提高,信息系统运行阶段的复杂性和资源比例逐渐增加。一方面,信息已成为业务创新、技术应用和运营服务的综合体,而不仅仅是技术平台建设。另一方面,信息采购是技术平台建设。另一…...

解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性
问题场景 IDEA执行mvn clean package -DskipTesttrue命令或者借助工具的Maven菜单进行打包操作,然后执行java -jar app.jar命令后,提示jar中没有主清单属性 D:\WorkSpace\demo\target>java -jar demo-SNAPSHOT.jar demo-SNAPSHOT.jar中没有主清单属性…...
Python--文件和异常
目录 1、读取文件 1.1 读取文件的全部内容 1.2 相对路径和绝对路径 1.3 访问文件中的各行 1.4 使用文件中的内容 1.5 包含100万位的大型文件 1.6 圆周率中的生日 2、写入文件 2.1 写入一行 2.2 写入多行 3、异常 3.1 处理ZeroDivisionError 异常 3.2 使用try-exce…...

IDEFICS 简介: 最先进视觉语言模型的开源复现
我们很高兴发布 IDEFICS ( Image-aware Decoder Enhanced la Flamingo with Ininterleaved Cross-attention S ) 这一开放视觉语言模型。IDEFICS 基于 Flamingo,Flamingo 作为最先进的视觉语言模型,最初由 DeepMind 开发,但目前尚未公开发布…...
玩转Mysql系列 - 第20篇:异常捕获及处理详解
这是Mysql系列第20篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 需求背景 我们在写存储过程的时候,可能会出现下列一些情况: 插入的数据违反唯一约束ÿ…...
一些工具类
1、字符串处理工具类 1.1、StrUtils package com.study.java8.util;/*** Classname:StrUtils* Description:字符串工具类* Date:2023/9/9 9:37* Author:jsz15*/import org.apache.commons.lang.text.StrBuilder; import org.apa…...

20230916后台面经整理
1.面对抢优惠券这样的高负载场景,你从架构、负载均衡等方面说一下你的设计? 答了参考Nginx进行负载均衡,然后在每台服务器怎么怎么弄(架构每一层怎么设计) 参考https://toutiao.io/posts/6z3uu2m/preview,h…...

如何通过快解析测试接口内外网?本地内网ip让外网访问连接
接口调试测试是网络技术员经常工作内容之一。如在公司内部api项目webserver测试,在公司内办公室个人电脑是正常用内网IP访问连接测试的,但在外网电脑需要远程测试时需要怎么测试呢?这里提供一种内网地址让外网访问的通用方法:快解…...

用c++实现五子棋小游戏
五子棋是一款经典小游戏,今天我们就用c实现简单的五子棋小游戏 目录 用到的算法: 思路分析 定义变量 开始写代码 完整代码 结果图: 用到的算法: 合法移动的判断:isValidMove 函数通过检查指定位置是否在棋盘范…...

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(二)
1.前言 在12.0的系统定制化开发中,由于从12.0开始SystemUI下拉状态栏和11.0的变化比较大,所以可以说需要从新分析相关的SystemUI的 布局,然后做分析来实现不同的功能,今天就开始实现关于隐藏SystemUI下拉状态栏中的通知栏布局系列二,去掉下拉状态栏中 通知栏部分 白色的…...

通过finalshell快速在ubuntu上安装jdk1.8
这篇文章主要介绍一下怎么通过finalshell连接ubuntu,然后在ubuntu上安装jdk1.8,让不熟悉linux操作系统的童鞋也能快速地完成安装。 目录 一、准备一台虚拟机 二、安装finalshell远程连接工具 三、获取ubuntu虚拟机的ip地址 四、通过finalshell连接u…...

【Linux从入门到精通】多线程 | 线程互斥(互斥锁)
上篇文章我们对线程 | 线程介绍&线程控制介绍后,本篇文章将会对多线程中的线程互斥与互斥锁的概念进行详解。同时结合实际例子解释了可重入与不被重入函数、临界资源与临界区和原子性的概念。希望本篇文章会对你有所帮助。 文章目录 引入 一、重入与临界 1、1 可…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...