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…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
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. 查看链接器参数(如果没有勾选上面…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
