MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句
阿丹:
本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。
先放官方的文章
MongoDB CRUD操作 - MongoDB-CN-Manual
本文章分为:
在客户端(dos窗口)/可视化工具中使用MongoDB语句
在spring-boot中整合mongodb并完成数据的增删改查
在窗口中以及可视化工具使用mongodb语句进行操作
MongoDB如何创建数据库和集合 | MongoDB中文社区
MongoDB CRUD操作 - MongoDB-CN-Manual
新建一个查询来演示效果:
mongodb如何创建数据库和集合
数据库学习的第一步一定是创建数据库和集合。数据库用于存储所有集合,而集合用来存储所有文档。这些文档将一次包含相关的“字段名”和“字段”的值。
同时我们要知道一个事情就是文档中也是可以存在文档的。类比与java中的实体类就方便理解很多。一个类中的属性也可以是其他的实体类。
下面是一个文档是示例:
{“Employeeid”:1,“EmployeeName”:“Smith”
}
冒号前面是field names
后面就是 field values
使用Use命令创建数据库
使用use命令来创建一个新的数据库:
use ExampleDB
这个代码中的ExampleDB就是新建的数据库文件。
这段mongodb的use代码可以类比为mysql中的:
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'ExampleDB') CREATE DATABASE ExampleDB;
这个示例的sql在mysql中执行的时候是一个效果。
代码解释:
1、使用 use 命令来创建mongodb中的数据库,如果数据库不存在,将创建一个新的数据库。
2、同样如果数据库存在则使用这个数据库。
可以看到执行成功。在use语句执行成功之后mongodb将自动切换到创建的数据库。
使用insert()创建集合/表
创建集合的最简单方法是一条记录(不过是使用字段名称和值组成的文档)插入到集合中。如果该集合不存在,则会创建一个新的集合。
use ExampleDBdb.ExampleDB.insert
({"员工编号":1,"员工姓名":"阿丹"})
解释一下语法:
db:是一个对象,代表一个数据库的连接。在使用这个语言之前,需要建立数据库的连接。以便在代码中访问数据库。
ExampleDB:进行操作的集合名称,如果没有这个集合就会新建这个集合。
{"员工编号":1,"员工姓名":"阿丹"}
上面就是一个文档
“员工编号”:就是一个field names
“员工编号的值”:就是value
注意:
如果在mongodb中没有这个库的数据使用这样的插入语句就会新建一个这样的库
使用上述语句来进行插入的时候是不完善的。因为这会导致我们的这个新增的文档添加到一个与库的名字一样的集合中去。一定要注意。
使用insert()在mongodb中插入数组
尝试使用数组的形式一次性的多次传入多个文档。
完成步骤思想:
1、创建一个名字叫Example数组javascript变量来保存文档数组
2、将具有字段名称的值和所需要的文档添加到变量中
3、使用insert命令将文档数组插入到集合中
#定义数组
var Example = [{"员工编号":2,"员工姓名":"帅丹"},{"员工编号":3,"员工姓名":"大力丹"},{"员工编号":4,"员工姓名":"快乐丹"}
]
#将定义的数据添加到ExampleDB集合中
db.ExampleDB.insert(Example)
这就是在MongoDB中完成了批量添加。 现在可以看到已经成功的加入了三条数据。也就是三个文档。
使用查询语句,并规定使用JSON格式打印
在以前使用的文档形式存储的格式中最常使用的就是json的形式。更是因为如果我们拿到了json形式的字符串的话。我们可以很轻松的将这个json字符串转换成我们的实体类。
json格式的全称为JavaScript Ojbect Notation的格式(对我们敲java的人很友好),是一种规律的存储信息,并且便于阅读的格式。
那么下面我们就使用语句来完成打印json的示例:
db.查询使用的集合.find().forEach(printjson)
执行尝试一下:
代码方法以及参数解释:
db.ExampleDB.find()
: 这个语句使用find()
方法来查询ExampleDB数据库中的所有文档。find()
方法返回一个游标(cursor)对象,该对象包含了所有符合查询条件的文档。forEach
: 这个方法用于遍历游标中的每个文档,并对每个文档执行指定的操作。printjson
: 这个函数用于将文档以JSON格式打印到控制台上
其中的find()如果括号中什么都不写的话就默认是查找所有的。
如何去设置主键ID呢?
通过解析刚才MongoDB给我们的返回值中我们可以看到本来在业务逻辑中员工编号是成为使用主键id。但是发现mongodb自己生成了一个不规则的字符串字段。“_id”。现在我们需要将这个“_id”给设置成我们的主键id.
在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的ObjectID值。
默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段
所以原理是只要我们在添加的时候有这个字段名叫做“_id”就可以完成主键的替换。不在使用系统自带的生成的id.
我们来进行尝试:
使用代码:
db.ExampleDB.insert
({"_id":1,"员工姓名":"代码阿丹"})
我在这个文档中规定使用了字段名:“_id”
显示添加成功,使用上一小节的查询输出来查看一下,代码阿丹的id是否为1.替换掉系统自己生成的id。
可以看到完成了主键id的规则替换。
说明我们可以使用给字段名“_id”赋值来作为集合的主键。
使用mongodb中的查询语句find()来进行查询mongodb文档
通过条件查询的语句的执行我们就可以从mongodb中拿到更精准的的数据。以及组合等数据。从后台拿取的数据越精确对于后面的开发就会省力很多。
那么MongoDB就提供了一个名为db.collection.find()的函数,该函数用于从MongoDB数据库中检索文档。
基本查询操作:
基本查询操作包括一些简单的操作,比如获取MongoDB集合中的所有文档。
因为我们之前的操作中的我们新建了一个ExampleDB集合。所以我们就可以执行下面的命令。
db.ExampleDB.find({})
指令解析:
db.ExampleDB.find({})
这个 MongoDB 语句的作用是在 ExampleDB 数据库中查找所有文档。
find()
方法是 MongoDB 中用于查询文档的方法,它接受一个查询条件作为参数,并返回符合条件的所有文档。在这个例子中,查询条件是一个空对象 {}
,表示没有限制条件,因此会将数据库中的所有文档都返回。
{}
这个符号表示一个空的查询条件,也可以使用其他条件来限制查询的结果。例如,你可以使用类似于 { "员工姓名": "阿丹" }
的条件来查询员工姓名为 "阿丹" 的文档,或者使用类似于 { "员工编号": { $gt: 100 } }
的条件来查询员工编号大于 100 的文档。
因此,db.ExampleDB.find({})
这个语句的作用是返回 ExampleDB 数据库中的所有文档,而 {}
表示没有限制条件,会返回所有文档。
条件查询
明确条件查询
比如我想要查询员工编号为1的员工。下面是一个例子:
#查询员工编号为1的员工
db.ExampleDB.find({"员工编号":1}).forEach(printjson)
这个语句中使用了{},中括号的方式,在中括号中使用了json的形式来规定规则,来查询指定的编号员工。
范围查询
使用大于搜索条件,它实际上搜索那些大于指定值的文档。
比如我想查询员工标号大于2的文档,下面是例子:
#查询员工编号大于2的员工
db.ExampleDB.find({"员工编号":{$gt : 2}}).forEach(printjson)
解释说明:
$gt为查询选择运算符,意思是使用大于号表达式。
给大家提供一下有关的判断表达式;
$lt
:小于$eq
:等于$ne
:不等于$gt
:大于等于$lt
:小于等于
MongoDB游标教程:通过示例来学习
当使用db.collection.find()函数在集合中搜索文档时,结果将返回指向文档集合的指针,该指针称为游标。类似于指针。
默认情况下,返回查询结果时,游标将自动进行迭代。当然可以一个接一个明确展示游标中返回的结果目录。
比如在集合中有三个文档,光标初始化指向第一个文档,然后遍历该集合的所有文档。
示例代码:
#演示游标
var myExampleDB = db.ExampleDB.find({});
while(myExampleDB.hasNext()){print(tojson(myExampleDB.next()))
}
代码解释:
这段代码的作用是在 ExampleDB 数据库中查找所有文档,并将每个文档以 JSON 格式打印到控制台上。
首先,通过 db.ExampleDB.find({})
方法查询 ExampleDB 数据库中的所有文档,返回一个游标对象 myExampleDB
。
然后,使用 while
循环遍历游标中的每个文档,直到游标中的文档遍历完毕。在循环体中,使用 tojson()
函数将每个文档转换为 JSON 格式,并使用 print()
函数将 JSON 打印到控制台上。
总的来说,这段代码的功能是查询 ExampleDB 数据库中的所有文档,并将每个文档以 JSON 格式打印到控制台上
MongoDB limit查询结果
这个修饰符用于限制查询结果集中返回的文档数。下面就是例子。
#limit结果
db.ExampleDB.find().limit(2).forEach(printjson)
这个语法和用法和mysql中的类似但不一样。这个函数中参数是几就查出几个文档。
MongoDB中的排序
在MongoDB中是支持根据集合中的任何键升序或者降序来制定要返回的文档的顺序的。
示例代码:
#根据员工编号倒序排序
db.ExampleDB.find().sort({ 员工编号: -1}).forEach(printjson)
这里清楚地显示了按Employeeid降序返回的文档。
值为1则按照升序。
MongoDB中的计数函数Count()
聚合的概念是对查询中返回的结果进行计算。例如,假设我们想知道根据触发的查询集合中文档的数量是多少,那么MongoDB提供了count()函数。
让我们可以查询文档中数量。
让我们看一个例子。
#查看集合中文档数量
db.ExampleDB.count()
这里是一些count()函数的用法
在 MongoDB 中,count()
函数用于计算集合中满足指定条件的文档数量。count()
函数接受一个查询条件作为参数,并返回满足条件的文档数量。
以下是一些使用 count()
函数的示例:
计算集合中所有文档的数量:
db.myCollection.count({})
计算集合中指定条件的文档数量:
db.myCollection.count({ "key": "value" })
使用 match
管道操作符计算集合中匹配条件的文档数量:
db.myCollection.aggregate([{ $match: { "key": "value" } },{ $count: "count" }
])
使用 match
和 group
管道操作符计算分组后的文档数量:
db.myCollection.aggregate([{ $match: { "key": "value" } },{ $group: { _id: "groupKey", count: { $sum: 1 } } }
])
以上示例中,count()
函数分别用于计算集合中所有文档数量、计算满足特定条件的文档数量、使用 match
和 group
管道操作符计算分组后的文档数量。
MongoDB中的删除文件remove()
在MongoDB中,db.collection.remove()方法用于从集合中删除文档。所有文档都可以从集合中删除,也可以仅从符合特定条件的文档中删除。
如果仅发出remove命令,则所有文档将从集合中删除。
下面的代码示例演示如何从集合中删除特定文档。
#删除员工标号为4的文档
db.ExampleDB.remove({员工编号:4})
可以看到对于删除对应字段名和值的语法。
使用 Update()更新MongoDB文档
MongoDB提供了update()命令来更新集合的文档。仅仅更新要更新的文档,可以将条件添加到更新语句,以便更新选定的文档。
该命令中的基本参数是需要更新文档的条件,其次是需要执行的修改。
操作思路:
- 发出更新命令;
- 选择要用于确定需要更新哪个文档的条件。在我们的例子中,我们要更新员工ID为22的文档;
- 使用set命令修改字段名称;
- 选择要修改的字段名称,并相应地输入新值。
#修改员工标号为1的名字
db.ExampleDB.update({"员工编号":1}, {$set:{"员工姓名":"库库帅阿丹"}}
)
看到表明,一条记录符合条件,一条记录修改了相关字段!!!
下面是一些update的用法
这个代码是使用 MongoDB 的 update()
函数来更新名为 "员工编号" 的字段值为 1 的文档中的 "员工姓名" 字段的值为 "库库帅阿丹"。
具体来说,update()
函数接受两个参数:
- 查询条件,指定要更新的文档。在这个例子中,查询条件是
{"员工编号":1}
,表示要更新 "员工编号" 字段值为 1 的文档。 - 更新操作,指定要对文档进行的更新操作。在这个例子中,更新操作为
{ $set: { "员工姓名": "库库帅阿丹" } }
,表示要将 "员工姓名" 字段的值更新为 "库库帅阿丹"。
其中,更新操作可以使用以下几个操作符:
$set
: 设置指定字段的值。$unset
: 删除指定字段。$rename
: 重命名指定字段。$inc
: 增加指定字段的值。
除了上面的示例,update()
函数还可以使用其他参数来控制更新行为,比如 multi
参数(指定是否更新多个文档)和 upsert
参数(指定是否插入新文档)。
总之,update()
函数是 MongoDB 中用于更新文档的函数,可以方便地对数据库中的文档进行修改操作。
相关文章:

MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句
阿丹: 本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。 先放官方的文章 MongoDB CRUD操作 - MongoDB-CN-Manual 本文章分为: 在客户端(dos窗口)/可视化工具中使用…...

“RISC-V成长日记” blog发布,第一个运行在RISC-V服务器上的blog?
尽管推特、公众号、微博、抖音等社交平台风靡一时,但blog(博客)在全世界依然经久不衰,尤其是在技术领域。对于博主而言,博客是他们独立创作的天地,可以随时更新内容和故事,确保素材的时效性。此…...

gitlab配置webhook
一.前言 当需要做jenkins的自动化触发构建时,就需要配置gitlab的webhook功能,以下来展示以下如何配置gitlab的webhook,jenkins的配置就不在这里展示了,可以去看我devops文章的完整配置 二.配置 在新版本的gitlab中,…...
编译安装Linux内核实践与踩坑
编译安装Linux内核实践与踩坑 1. 参考方案 先留个坑 1. 参考方案 编译安装linux内核ShawnZhong的仓库make mrproper make oldconfig scripts/config --set-str SYSTEM_TRUSTED_KEYS "" KBUILD_BUILD_TIMESTAMP make CC"ccache gcc" -jnproc LOCALVERSION-…...

郑州https数字证书
很多注重隐私的网站都注重网站信息的安全,比如购物网站就需要对客户的账户信息以及支付信息进行安全保护,否则信息泄露,客户与网站都有损失,网站也会因此流失大量客户。而网站使用https证书为客户端与服务器之间传输的信息加了一个…...

第125天:内网安全-隧道技术SMBICMP正反向连接防火墙出入规则上线
知识点 #知识点: 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、规则-隧道技术-SMB&ICMP-隧道技术:解决不出网协议上线的问题(利用出网协议进行封装出网) -代理技术:解决网络通讯不通的问题࿰…...

性能测试怎么做?测试工具怎么选择?
在当前软件测试行业,熟练掌握性能测试已经是测试工程师们面试的敲门砖了,当然还有很多测试朋友们每天的工作更多的是点点点,性能方面可能也只是做过简单的并发测试,对于编写脚本,搭建环境方面也比较陌生。今天这篇文章…...

【Eclise配置Jdk环境】Jre环境常见配置错误问题
1、问题描述:执行Run As → Maven install 报出以下错误。 [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.example:gobang >------------------------- [INFO] Building gobang 0.0.1-SNAPSHOT [INFO] -------------------…...

UM2080F32——32位SoC芯片
UM2080F32是基于ARM Cortex-M0内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200MHz~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同…...

IDEA基础使用
IDEA基础使用 1、IDEA中显示用法和用户截图展示有调用显示无调用显示 对应方法 2、如何找出项目中所有不被调用方法截图展示对应方法 3、常用代码(Code)说明及快捷键:4、未完待续待日后更新。。。总结:欢迎指导,也祝码友们代码越来越棒,技术越…...

[数据集][目标检测]遛狗不牵绳数据集VOC格式-1980张
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1980 标注数量(xml文件个数):1980 标注类别数:5 标注类别名称:["dog","p…...
基于WebRTC升级的低延时直播
快直播-基于WebRTC升级的低延时直播-腾讯云开发者社区-腾讯云 标准WebRTC支持的音视频编码格式已经无法满足国内直播行业需求。标准WebRTC支持的视频编码格式是VP8/VP9和H.264,音频编码格式是Opus,而国内推流的音视频格式基本上是H.264/H.265AAC的形式。…...

数学知识(二)
一、裴蜀定理 对于任意整数a,b,一定存在非零整数x,y,使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…...

Java实现数据库表中的七种连接【Mysql】
Java实现数据库表中的七种连接【Mysql】 前言版权推荐Java实现数据库表中的七种连接左外连接右外连接其他连接 附录七种连接SQL测试Java测试转换方法类 Cla1类 Cla2类Cla3 最后 前言 2023-8-4 16:51:42 以下内容源自《【Mysql】》 仅供学习交流使用 版权 禁止其他平台发布时…...
452. 用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可…...
HTML <rp> 标签
实例 一个 ruby 注释: <ruby> 漢 <rt><rp>(</rp>ㄏㄢˋ<rp>)</rp></rt> </ruby>浏览器支持 元素ChromeIEFirefoxSafariOpera<rp>5.05.538.05.015.0 Internet Explorer 9, Firefox, Opera, Chrome 以及 S…...

常见的设计模式(超详细)
文章目录 单例模式饿汉式单例模式懒汉式单例模式双重检索单例模式 工厂模式简单工厂模式工厂(方法)模式抽象工厂模式 原型模式代理模式 单例模式 确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。 饿汉式单例模式 饿汉式单…...

Excel 超牛的格式调整汇总——你还在担心你做出来的表不好看吗
Excel格式调整技巧 绘图逆序绘制条形图设置条形图宽度 条件格式透视表上的条件格式 数字格式千分位逗号数字同时显示 K M 数据分列非重复计数区域透视图新增计算列隐藏行列快捷键其他小技巧 绘图 逆序绘制条形图 设置条形图宽度 条件格式 透视表上的条件格式 条件格式随切片…...
hyperf 十二、自动化测试
文档教程:Hyperf 用co-phpunit提供测试,在composer中测试。 "scripts": {"test": "co-phpunit --prepend test/bootstrap.php -c phpunit.xml --colorsalways", } 测试中使用Hyperf\Testing\Client模拟请求,该类调用Hyp…...

dblink简单使用
1.配置tns [oraclepg1 admin]$ cat tnsnames.ora 19c (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.56.100)(PORT 1521)))(CONNECT_DATA (SERVICE_NAME orcl)))11g (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.56…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...