当前位置: 首页 > 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 可…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...