MogoTemplate基本入门(Mongodb数据库基本增删改查)

nosql 因为没有标准的 sql,各有各的操作方式,所以学习成本比较高。实际应用也不会去命令行直接操作,而是用编程语言的 api。

所以我们可以简单了解一下Mongodb,然后用java的Api去操作就行了

没必要花很大功夫在命令行上操作执行

先看看这个简单了解一下我们的Mongodb

【GeekHour】20分钟掌握MongoDB_哔哩哔哩_bilibili

然后看这个教程的15p-20p,来简单在IEDA上用MongoTemplate

15.整合SpringBoot集合操作_哔哩哔哩_bilibili

目录

mongodb应用场景

mongodb和mysql的对比

Mongodb的特点

Mongodb的启动和部署(基本入门)

show database

switched to db XXX

创建集合

insertOne()

ackonwledge

insertedId

查询user里面的数据

insertMany()插入多个数据

limit

sort()排序

skip()

查询level为3的用户 

限制返回字段的数目

$gt表示大于,$lt表示小于,$eq表示等于

level:{xxx查询条件}

exist是查询字段是否存在,而不能查询字段的值是否存在

默认会把多个条件组成一个and条件查询

正则表达式

countDocuments()

findOne()

updateOne()

updateMany  更新多个

deleteOne

deleteMany

Java中使用Mongodb

添加文档

Document

id

Field

Transient

编写实体类POJO,对应Mongodb

Mongodb会往集合中添加多一个class属性

插入一条数据save()和insert()

批量插入(注意类型错误)

查询文档

基于Criterial实现

查询

条件查询(Query())

多条件查询Cretial()

query.with()做排序分页和跳过

BasicQuery()传Json

参数名称要对应我们的POJO类

更新文档操作

setOnInsert()

upsert()

getModifiedCount()

updateFirst()

updateMulti()

upsert()

UpdateResult类型

Update类型

删除文档操作

删除所有文档

条件删除

remove()删除

dropCollection



mongodb应用场景

适用于高读写,高并发状态

mongodb和mysql的对比

 Mongodb:

是操作文档对象的

collections里面有多个文档

Mongodb的特点

高性能,高可用,高扩展

Mongodb的启动和部署(基本入门)

 推荐使用的连接工具

我使用的是mongodb自带的gui可视化工具

左边三个是我们的默认的数据库

三个分别是查询页面,数据库列表和性能监控界面

我们可以在终端输入help来查看我们的帮助文档

 

show database

test是我们当前默认的数据库

我们可以用show database来展示当前数据库

这是一个特点

只有我们往这个数据库里面插入数据的时候,我们的数据库才会被创建

switched to db XXX

 我们这样子来转换我们使用的数据库

创建集合

我们想创建一个用户集合

就是db.users

insertOne()

是我们插入一个文档到这个集合中

ackonwledge

表示是否成功插入

insertedId

表示插入成功后这个用户的Id

这个字段是mongodb自动生成的,它是一个全局的唯一ID

查询user里面的数据

db.users.find()

insertMany()插入多个数据

limit

限制返回的数据

 

sort()排序

1的话就是升序排序,-1的话就是降序排序

skip()

这里的skip(1),也就是我们跳过我们查询出来的第一个数据

查询level为3的用户 

mongodb的数据库类型是非常严格的

我们查询数字3,和查询字符“3”是不同的

限制返回字段的数目

限制返回字段的数目

我们要查询level为3的,然后我们查询到的数据只返回我们的name和email字段

我们的这个_id是自动返回的,我们不想要这个返回,我们就让这个变成0

这样子

$gt表示大于,$lt表示小于,$eq表示等于

level:{xxx查询条件}

in,查询是否存在

{level:{$in:[1,3]}}

exist是查询字段是否存在,而不能查询字段的值是否存在

exist是查询字段是否存在,而不能查询字段的值是否存在

 

例如我们是exist:1

这个email是null,我们也同样返回了

默认会把多个条件组成一个and条件查询

相同的

正则表达式

忽略大小写,我们就后面加个options然后+个i就可以了

countDocuments()

统计所有的数量

 count()也可以加查询条件

findOne()

找一条数据,一般都是返回第一条

updateOne()

如果更新的Mongodb字段不存在的话,我们会默认创建这个字段

updateMany  更新多个

deleteOne

deleteMany


Java中使用Mongodb

下面是我们的配置

首先确保我们的mongodb开启

首先引入Mongodb的起步依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>

编写配置文件进行配置

database是指定我们的mongodb的数据库

写个测试类测试一下

我们使用Navicat连接我们的mongodb数据库

成功创建


添加文档

 

Document

映射mongo中的一条文档数据

(value,collection)指定操作的集合名称

id

映射文档的_Id值

Field

将成员变量映射成文档中的一个key:value对

(name,value)指定文档中key的名称,默认为成员变量名

Transient

避免序列化,指定成员变量不参与文档的序列化

编写实体类POJO,对应Mongodb

我们不需要Mongodb去给我们创建Id,我们自己先传一个Id

Mongodb会往集合中添加多一个class属性

对应java中类的全限定路径,这样做是为了查询时可以把Document类型转换成java类型

插入一条数据save()和insert()

save()

如果存在,那么就修改这条数据insert()

插入,如果存在我们就不能插入,重复插入会抛出异常


批量插入(注意类型错误)

这样子写时错误的

因为我们Mongodb会默认我们的类是List类

所以我们要加多一个Employee.Class

这样就成功批量插入了


查询文档

基于Criterial实现

 Cretial.where

可以把多个条件组合在一起

查询

如果我们不往new Query()里面传东西,那么它和findAll()是等同的

findAll,findOne,findById

条件查询(Query())

条件查询就是构建我们的Query()对象

Query()写我们的查询

多条件查询Cretial()

我们的Cretial在我们的Query()里面来使用

Cretial() 是我们的多条件查询 and or,我们要把这个条件放入到我们的Query()里面

query.with()做排序分页和跳过

Sort.by()是根据什么进行排序

然后用Sort()写我们的排序条件

.skip()

.limt()


BasicQuery()传Json

我们还可以直接传我们的Json

然后我们就要使用BasicQuery(),然后把我们写好的Json传进去

其实如果使用Json,就相当于我们在命令行那样执行

参数名称要对应我们的POJO类

我们的name是java层面的,但数据库里面是username

我们有个Field字段,给它映射成username


更新文档操作

setOnInsert()

指定要插入的是id为11的数据

upsert()

没有符合条件的记录就插入数据

getModifiedCount()

updateFirst()

updateMulti()

upsert()

 

UpdateResult类型

我们update返回的类型是UpdateResult类型

Update类型

使用Update类型弄的对象,来设置我们的更新属性

updateFirst() 更新第一条

updateMulti()更新所有符合条件的

upsert() 有的话就更新,没有的话就插入这个数据

记得,我们的update()方法,要往里面传我们的Update类型


删除文档操作

分为

删除所有文档

条件删除

  

remove()删除

Query()写我们的条件

remove()用来删除

dropCollection

可以删除整个文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战

​​​​​​​ 目录 一、引言 二、模型简介 2.1 GLM4-9B 模型概述 2.2 GLM4-9B 模型架构 三、模型推理 3.1 GLM4-9B-Chat 语言模型 3.1.1 model.generate 3.1.2 model.chat 3.2 GLM-4V-9B 多模态模型 3.2.1 多模态模型概述 3.2.2 多模态模型实践 四、总结 一、引言…

parseInt函数

貌似遇到问题了&#xff0c;在Java中&#xff0c;parseInt方法是java.lang.Integer类的一个静态方法&#xff0c;它用来将字符串转换为基本数据类型int。如果字符串不能被解析为有效的整数&#xff0c;parseInt会抛出一个NumberFormatException。 原来是取整串转换&#xff0c;…

Vue随笔记

1 Idea里面使用Vue Idea里面要安装Vue插件 File - New - Project - JavaScript - Vue.js 然后出现&#xff1a; "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js" --ignore-existing --package vue/cli…

Keil中for(int i=0;;)报错

一、报错 二、报错原因 定义变量i报错 这是C的写法&#xff0c;C语言不支持 用C语言格式应该为 int i0; for(int i;;;) {} c99支持第一种写法&#xff0c;如果使用gcc&#xff0c;可以指定c99模式。 三、指定c99模式

cv2.imwrite路径中存在中文时出现乱码问题

cv2.imwrite(path, img) 在写入包含中文的路径的时候&#xff0c;保存的文件名称为乱码。 解决办法&#xff1a; cv2.imwrite(path,image)将上面的代码修改为以下代码&#xff0c;可以避免出现中文乱码。 cv2.imencode(.jpg, image)[1].tofile(path)

搜索与图论:图中点的层次

搜索与图论&#xff1a;图中点的层次 题目描述参考代码 题目描述 输入样例 4 5 1 2 2 3 3 4 1 3 1 4输出样例 1参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e[N]…

【Linux网络】传输层协议 - UDP

文章目录 一、传输层&#xff08;运输层&#xff09;运输层的特点复用和分用再谈端口号端口号范围划分认识知名端口号&#xff08;Well-Know Port Number&#xff09;两个问题① 一个进程是否可以绑定多个端口号&#xff1f;② 一个端口号是否可以被多个进程绑定&#xff1f; n…

德国西门子论未来质量管理 - 如何与明天相遇?

未来制造业的质量 -- 如何用软件方案满足质量要求 作者&#xff1a;Bill Butcher 翻译&编辑&#xff1a;数字化营销工兵 【前言】在Frost&Sullivan最近发表的一份白皮书中&#xff0c;他们讨论了制造业的质量投资。质量是制造过程的关键要素&#xff0c;但似乎比其他…

【贡献度分析(帕累托图)】

文章目录 前言一、贡献度分析是什么&#xff1f;二、使用步骤1. 准备数据2. 排序数据3. 绘制帕累托图4. 分析结果5. 实际应用 三、示例代码 前言 贡献度分析也称为帕累托分析。它可以帮助我们理解数据集中各个因素对整体影响的程度&#xff0c;从而优先处理最重要的因素&#…

oracle数据库通过impdp导入数据时提示,ORA-31684:对象类型用户xxx已存在,和ORA-39151:表xxx存在的解决办法

前提条件&#xff1a;首先备份原数据库中此用户对应的schemas 比如名为cams_wf的schemas 以便出了问题后还可以恢复原数据。 解决办法一、 通过命令或者数据库管理工具删除掉此schemas下的所有表&#xff0c;然后在impdp中加入ignorey 来忽略ORA-31684&#xff1a;对象类型用…

Python logging 模块详解

Python 的 logging 模块提供了一个强大而灵活的日志系统。它是 Python 标准库的一部分&#xff0c;因此可以在任何 Python 程序中使用。logging 模块提供了许多有用的功能&#xff0c;包括日志消息的级别设置、日志消息的格式设置、将日志消息输出到不同的目标&#xff0c;以及…

UE5刷植物悬空了

UE5系列文章目录 文章目录 UE5系列文章目录前言一、解决办法 前言 在Unreal Engine5.3中使用植物模式刷各种植物时&#xff0c;有时会发现有的植物要么悬空&#xff0c;要不有刷不上地板的情况。而且悬空的植物还不能接触到地面&#xff0c;感觉很奇怪&#xff0c;就像下图所示…

mmdetection的生物图像实例分割三:自定义数据集的测试与分析

mmdetection的生物图像实例分割全流程记录 第三章 自定义数据集的测试、重建与分析 文章目录 mmdetection的生物图像实例分割全流程记录前言一、测试集的推理1.模型测试2.测试数据解析 二、测试结果的数据整合三、生物结构的重建效果 前言 mmdetection是一个比较容易入门且上…

【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法

文章目录 前言 背景介绍 初始代码 优化代码 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 背景介绍 在一个嵌入式软件开发项目中&#xff0c;需要设计一个ECU节点的CAN网路数据发送&#xff0c;需求是在500k的通信波特率上&a…

机器人舵机:关键要素解析与选择指南

在机器人技术日新月异的今天&#xff0c;舵机作为机器人的核心部件之一&#xff0c;扮演着至关重要的角色。它的性能直接关系到机器人的运动控制、稳定性以及精度等方面。那么&#xff0c;在选择和使用机器人舵机时&#xff0c;我们需要关注哪些关键要素呢&#xff1f;本文将为…

使用Vue.js将form表单传递到后端

一.form表单 <form submit.prevent"submitForm"></form> form表单像这样写出来&#xff0c;然后把需要用户填写的内容写在form表单内。 二.表单内数据绑定 <div class"input-container"><div style"margin-left: 9px;"&…

WALT算法简介

WALT(Windows-Assist Load Tracing)算法是由Qcom开发&#xff0c; 通过把时间划分为窗口&#xff0c;对 task运行时间和CPU负载进行跟踪计算的方法。为任务调度、迁移、负载均衡及CPU调频 提供输入。 WALT相对PELT算法&#xff0c;更能及时反映负载变化&#xff0c; 更适用于…

String类知识

目录 一、String存在意义 二、字符串为何不可变 三、String类常用方法 1、字符串构造 2、String对象的比较 3、字符串查找 4、转化 &#xff08;1&#xff09;数值和字符转化 &#xff08;2&#xff09;大小写转换 &#xff08;3&#xff09;字符串转数组 &#xff08;4&…

系统架构设计师【补充知识】: 应用数学 (核心总结)

24.1 图论之最小生成树 (1)定义: 在连通的带权图的所有生成树中&#xff0c;权值和最小的那棵生成树(包含图中所有顶点的树)&#xff0c;称作最小生成树。 (2)针对问题: 带权图的最短路径问题。 (3)最小生成树的解法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法&#xff0c;我…

重复文件怎么查找并清理,试试这5个文件去重方法(新)

重复文件怎么查找并清理&#xff1f;日常工作中&#xff0c;我们使用电脑的时间长了&#xff0c;都会累积大量好的文件&#xff0c;这其中难免会出现重复文件。这些重复文件不仅占用了电脑磁盘空间&#xff0c;还会降低电脑性能。因此&#xff0c;我们必须定期对重复文件查找出…