当前位置: 首页 > news >正文

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

前言 计算机组成原理及体系结构 数据的表示 进制的转换 原码反码补码移码 最高位是符号位&#xff0c;负数符号位为1 反码补码正数和原码一样&#xff0c;负数有区别 反码符号位不动&#xff0c;其他位置取反 补码在反码基础上加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 监听事件 &#xff0c;在同一个虚拟机中如何保证顺序执行1. 设计原理2. 具体编码2.1. 编码事件监听器2.2. 制作一个生成序号方法2.3. 制作测试代码2.4. 测试结果 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;…...

数据结构入门 — 树的概念与结构

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

linux驱动开发day6--(epoll实现IO多路复用、信号驱动IO、设备树以及节点和属性解析相关API使用)

一、IO多路复用--epoll实现 1.核心&#xff1a; 红黑树、一张表以及三个接口、 2.实现过程及API 1&#xff09;创建epoll句柄/创建红黑树根节点 int epfdepoll_create(int size--无意义&#xff0c;>0即可)----------成功&#xff1a;返回根节点对应文件描述符&#xf…...

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. 创建多线程的方式创建线程有哪几种方式&#xff1f;2.1 通过继承Thread类来创建并启动线程的步骤如下&#xff1a;2.2 通过实现Runnable接口来创建并启动线程的步骤如下&#xff1a;2.3 通过实现…...

信息化项目验收的依据、内容和验收测评报告

随着信息系统业务覆盖率的提高和深度整合创新的逐步提高&#xff0c;信息系统运行阶段的复杂性和资源比例逐渐增加。一方面&#xff0c;信息已成为业务创新、技术应用和运营服务的综合体&#xff0c;而不仅仅是技术平台建设。另一方面&#xff0c;信息采购是技术平台建设。另一…...

解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性

问题场景 IDEA执行mvn clean package -DskipTesttrue命令或者借助工具的Maven菜单进行打包操作&#xff0c;然后执行java -jar app.jar命令后&#xff0c;提示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&#xff0c;Flamingo 作为最先进的视觉语言模型&#xff0c;最初由 DeepMind 开发&#xff0c;但目前尚未公开发布…...

玩转Mysql系列 - 第20篇:异常捕获及处理详解

这是Mysql系列第20篇。 环境&#xff1a;mysql5.7.25&#xff0c;cmd命令中进行演示。 代码中被[]包含的表示可选&#xff0c;|符号分开的表示可选其一。 需求背景 我们在写存储过程的时候&#xff0c;可能会出现下列一些情况&#xff1a; 插入的数据违反唯一约束&#xff…...

一些工具类

1、字符串处理工具类 1.1、StrUtils package com.study.java8.util;/*** Classname&#xff1a;StrUtils* Description&#xff1a;字符串工具类* Date&#xff1a;2023/9/9 9:37* Author&#xff1a;jsz15*/import org.apache.commons.lang.text.StrBuilder; import org.apa…...

20230916后台面经整理

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

如何通过快解析测试接口内外网?本地内网ip让外网访问连接

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

用c++实现五子棋小游戏

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

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(二)

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

通过finalshell快速在ubuntu上安装jdk1.8

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

【Linux从入门到精通】多线程 | 线程互斥(互斥锁)

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

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...