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 可…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
