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

news2024/11/26 8:47:12

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.coloradmin.cn/o/1795514.html

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

相关文章

创意SQL,高考祝福!一起为学子们加油助威!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机&#xff0c;每天晚上21点开始做rman完全备份&#xff0c;大约第2天上午9点多完成备份&#xff0c;rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份&#xff0c;6月2日上午10点15分完成备份&#xff0c;并生成了一个控制文件备份 c-4063271871-2024…

Navicat修改数据库主键

在MySQL数据库&#xff0c;主键ID默认自增&#xff08;最大的数字自增&#xff09;&#xff0c;但是&#xff0c;在某些情况下&#xff0c;我们想将其从头开始………… 借助Navicat修改数据库主键即可&#xff01; 1. 找到数据库&#xff0c;点击需要更改的表&#xff1a;点击…

二重,三重积分和曲面,曲线积分的关系和区别

这是我在学习完曲面曲线积分概念后容易和二重三重积分混淆而大概总结和区分了一下&#xff0c;如果有错误请大佬指出&#xff0c;多谢&#xff01;&#xff01;&#xff01;

I2C通信外设

I2C外设介绍 主机&#xff0c;就是拥有主动控制总线的权利。从机&#xff0c;只能在从机允许的情况下&#xff0c;才能控制总线。 多主机模型可分为固定多主机和可变多主机。固定多主机就是总线上&#xff0c;有2个或2个以上固定的主机&#xff0c;上面固定为主机&#xff0c;下…

GIF录屏工具Gif123 v3.3.0单文件

软件介绍 GIF的优势是小、轻、快&#xff0c;适合时间短、画面小、需要嵌入其他页面&#xff0c;打开就自动循环播放的动画。Gif123可录制合成鼠标轨迹,可调整鼠标指针大小,可在设置中打开鼠标指针高亮光圈功能,高亮光圈可跟随鼠标移动以指示鼠标位置。软件极其简单&#xff0…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及&#xff0c;明月切身体会到还是 IPSET 最方便了&#xff0c;无论你是 IPv4 还是 IPv6 都可以方便的管理&#xff0c;无论你是加入白名单还是黑名单&#xff0c;都非常的简单高效&#xff01;今天就参照明月自己的实操…

高校运维赛 2024 pyssrf

没有环境,简单过一遍思路吧 考点: pickle反序列化urllib库注入redis缓存 from flask import Flask,request from redis import Redis import hashlib import pickle import base64 import urllib app Flask(__name__) redis Redis(host127.0.0.1, port6379)def get_result(u…

安全测试 之 安全漏洞 CSRF

1. 背景 安全测试是在功能测试的基础上进行的&#xff0c;它验证软件的安全需求&#xff0c;确保产品在遭受恶意攻击时仍能正常运行&#xff0c;并保护用户信息不受侵犯。 2. CSRF 定义 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;中文名为“跨站请…

halo进阶-主题插件使用

开始捣鼓捣鼓halo&#xff0c;换换主题&#xff0c;加个页面 可参考&#xff1a;Halo 文档 安装/更新主题 主题如同壁纸&#xff0c;萝卜青菜各有所爱&#xff0c;大家按需更换即可&#xff1b; Halo好在一键更换主题&#xff0c;炒鸡方便。 安装/更新插件 此插件还扩展了插件…

神经网络 torch.nn---损失函数与反向传播

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation Loss Function的作用 每次训练神经网络的时候都会有一个目标&#xff0c;也会有一个输出。目标和输出之间的误差&#xff0c;就是用Loss Function来衡量的。所以&#xff0c;…

超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)

1. 模型检验 1.1 Holdout交叉验证 1.1.1 算法 在这种交叉验证技术中&#xff0c;整个数据集被随机划分为训练集和验证集。根据经验&#xff0c;整个数据集的近 70% 用作训练集&#xff0c;其余 30% 用作验证集。 优点&#xff1a;可以快速进行区分&#xff0c;仅仅通过一次区…

【cmake】cmake cache

cmake cache是什么 cmake cache是cmake在配置好后生成的一个CMakeCache.txt的文件&#xff0c;里面存储了一堆变量&#xff0c;这些变量一般都是关于项目的配置和环境的。 比如你用的什么编译器&#xff0c;编译器选项&#xff0c;还有项目目录。 例如&#xff08;在cmakelist…

06- 数组的基础知识详细讲解

06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量&#xff0c;并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值&#xff0c;才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则&#xff1a; …

Vivado 设置关联使用第三方编辑器 Notepad++

目录 1.前言2.Vivado关联外部编辑器步骤3.Notepad的一些便捷操作 微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 Vivado软件自带的编辑器超级难用&#xff0c;代码高亮对比不明显&#xff0c;而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验&#xff0c;可以…

伯克希尔·哈撒韦:“股神”的“登神长阶”

股价跳水大家见过不少&#xff0c;但一秒跌掉62万美元的你见过吗&#xff1f; 今天我们来聊聊“股市”巴菲特的公司——伯克希尔哈撒韦 最近&#xff0c;由于纽交所技术故障&#xff0c;伯克希尔哈撒韦A类股股价上演一秒归“零”&#xff0c;从超过62万美元跌成185.1美元&…

《QT从基础到进阶·四十一》无法解析的外部符号及生成事件加入QT打包命令报错问题

其他无法解析的外部符号&#xff1a; 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl ML_AddinManger::metaObject(void)const "… 无法解析的外部符号 “public: virtual void * __cdecl ML_AddinManger::qt_metacast(char const *)” (?…

微信小程序毕业设计-民大食堂用餐综合服务平台系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

查看服务器端口是否打开,如何查看服务器端口是否打开

查看服务器端口是否打开&#xff0c;是确保服务器正常运行和网络通信畅通的关键步骤。以下是几个有力的方法&#xff0c;帮助你快速、准确地判断端口状态。 首先&#xff0c;你可以使用telnet命令来检测端口的连通性。telnet是一个网络协议&#xff0c;可以用于远程登录和管理网…

中国新闻网怎么投稿 新闻稿件文章如何发布到中国新闻网上,附中国新闻网价格明细

中国新闻网是中国最具影响力和权威性的新闻门户网站之一。作为广大作者和媒体从业者&#xff0c;怎样向中国新闻网投稿一直是一个备受关注的话题。在这篇文章中&#xff0c;我们将着重介绍媒介库网发稿平台&#xff0c;并分享如何在该平台上成功投稿至中国新闻网。 媒介库网发稿…