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);}}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AP5193 DC-DC恒流转换器 消防应急 灯汽车灯 应急日光灯太阳能灯驱动IC

AP5193是一款PWM工作模式,高效率、外围简单、 内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。电流2.5A。AP5193可实现线性调光和PWM调光&#xff0c;线性调光 脚有效电压范围0.55-2.6V. AP5193 工作频率可以通过RT 外部电阻编程来设定&#xff0c…

postman发送图片

POSTMAN 如何发送携带图片的请求? 闲话不叙 步骤如下&#xff1a; 新建一个请求&#xff0c;在Headers中添加一对k-v : Content-Type > multipart/form-data 请求的接口: RequestMapping("/fileUploadController")public String fileUpload(MultipartFile fil…

【每日一题】1539. 第 k 个缺失的正整数

1539. 第 k 个缺失的正整数 - 力扣&#xff08;LeetCode&#xff09; 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1&#xff1a; 输入&#xff1a;arr [2,3,4,7,11], k 5 输出&#xff1a;9 解释&#xff1a;缺失…

【刷题-牛客】链表内指定区间反转

链表定区间翻转链表 题目链接题目描述核心思想详细图解代码实现复杂度分析 题目链接 链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com) 题目描述 核心思想 遍历链表的过程中在进行原地翻转 [m,n]翻转区间记作子链表,找到子链表的 起始节点 left 和 终止节点 right记录在…

基于Qt实现的可视化大屏监控

基于Qt实现的可视化大屏监控 先上图 基于Qt实现的可视化大屏监控 总有人质疑QWidget实现不了炫酷的界面&#xff0c;其实QWidget已经很强大了&#xff0c;虽然很多效果没有现成的框架&#xff0c;所以比不上html5或者安卓这种&#xff0c;但是也能实现很多不错的效果了&#…

Jetpack Compose干货,如何让Compose Dialog从屏幕任意方向进入

一、前言 来个效果图&#xff0c;基于Compose Dialog&#xff0c;最终要实现的库能力如下&#xff1a; 这里使用的是这个包下面的&#xff1a; androidx.compose.ui.window.Dialog androidx.compose.material3.AlertDialog它内部调用的也是androidx.compose.ui.window.Dialog …

Android开源 日志框架 LogDog V2.3.1

目录 一、简介 二、下载使用 添加jitpack 仓库 添加依赖: 三、更改 1、 LogDogV2.3.1初始化: 2、通过上面的初始化 &#xff0c;已经知道IJsonEngine 优化了泛型参数&#xff0c;采用 Object/Any 3、优化空异常的判断&#xff0c;哪怕打印变量是NULL LogDog会打印“nul…

Activiti7工作流 二【Activiti7入门、Activiti7进阶】

文章目录 六、Activiti7入门6.1 业务流程建模6.1.1 绘制流程图6.1.2 指定任务负责人6.1.3 生成png格式流程图 6.2 部署流程定义6.3 启动流程实例6.4 任务查询6.5 任务处理6.6 添加审批意见6.6 查看历史审批 七、Activiti7进阶7.1 流程定义相关7.1.1 流程定义查询7.1.2 流程资源…

有哪些好用的上网行为管理软件?(上网行为管理软件功能好的软件推荐)

随着互联网的快速发展&#xff0c;企业的信息化管理和员工的上网行为已经成为企业信息化建设的重要组成部分。上网行为管理软件作为一种新型的管理工具&#xff0c;可以帮助企业实现对员工上网行为的管控和优化&#xff0c;进而提高企业的工作效率和网络安全。本文将对多款市场…

minio文件上传

1.代码 大佬仓库&#xff1a;https://gitee.com/Gary2016/minio-upload?_fromgitee_search 关于这个代码的讲解&#xff1a;来自b站 2.准备minio 参考&#xff1a;[1]、[2] 2.1 下载 官网&#xff1a;https://min.io/download#/windows 2.2 启动 ①准备一个data文件夹…

树、二叉树、堆及其应用(堆排序、top-k问题)

目录 树的概念与结构 概念&#xff1a; 与树相关的概念: 树的表示&#xff1a; 二叉树 概念&#xff1a; 特殊的二叉树&#xff1a; 二叉树性质&#xff1a; 二叉树的存储结构&#xff1a; 堆 堆的概念: 堆的实现&#xff1a; 堆的创建&#xff1a; 堆的插入&#xff1a; 堆的删…

【算法思想-排序】排序数组-力扣 912 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

OJ练习第180题——颠倒二进制位

颠倒二进制位 力扣链接&#xff1a;190. 颠倒二进制位 题目描述 颠倒给定的 32 位无符号整数的二进制位。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指…

2023华为杯数学建模研赛E题全解析

2023华为杯数学建模研赛E题解析&#xff0c;完整版已出!!! 包含所有模型、代码、结果&#xff0c;39页技术文档&#xff0c;详细内容如下! 免费版链接已放在下面&#xff0c;需要的同学可以直接自取~ 【云顶数模】2023研究生数学建模免费链接&#xff1a; https://pan.baid…

【Redis】专栏合集,从入门到高级业务场景实战

作者简介 目录 1.概述 2.下载安装 3.基础操作 4.集群 5.实战场景 1.概述 诸如数mysql、Oracle之类的关系型数据库或者NTFS、HDFS之类的文件存储系统&#xff0c;其本质上数据都是存在磁盘上的。这是现代计算机体系架构的架构所决定的&#xff0c;要持久化存储的数据都会落…

卸载Visual Studio 2010学习版 —— 卸载VCExpress

目录 最初安装Visual Studio 2010学习版是因为计算机二级 C语言考试而装&#xff0c;现如今考完试后便可卸载掉了&#xff0c;安装简便而卸载却没有uninstall.exe文件。故本文提供卸载方式。 进入到程序目录&#xff0c;找到setup.exe文件&#xff0c;也可以在程序目录搜索set…

RDMA编程杂记

目录 编程杂记什么是P_Key建链基于Socket API的建链基于CM API的建链 编程杂记 什么是P_Key P_Key&#xff08;Partition Key&#xff09;用于提供InfiniBand网络的隔离机制&#xff0c;只有在一个分区内的节点可以互相通信。 P_Key是一个16位的值&#xff0c;有两部分 msb…

CRM客户管理系统英文专业版

外资公司日常沟通的语言以英文为主&#xff0c;业务往来也是涉及到国内外&#xff0c;专业的英文版CRM系统很适合这样的业务团队&#xff0c;尤其CRM供应商是国际化企业&#xff0c;在海外也有分公司、办事处。 多语言 ZOHO支持多语种如英语、汉语、日语等28种语言&#xff0…

Android面试题汇总(三)

Android 四大组件相关 1、Activity与Fragment之间常见的通讯方式 对于Activity与Fragment直接的相互调用&#xff1a; 1、Activity调用Fragment直接调用就好了&#xff0c;Activity一般是持有Fragment实例的。或者通过Fragment的id或者tag获取Fragment的实例 2、Fragment调用A…

攻防世界做题

xff_referer 进来之后显示ip地址必须为123.123.123.123 抓包看一下 要求ip是123.123.123.123 就可以用xff伪造即X-Forwarded-For: 123.123.123.123 得到显示&#xff1a; 说必须来自google&#xff0c;伪造referer Referer: https://www.google.com 我的要在右边的 inspec…