MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句

阿丹:

        本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。

 传送门:

MongoDB文档--基本概念_一单成的博客-CSDN博客

MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客

MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客

MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找_一单成的博客-CSDN博客

MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查_一单成的博客-CSDN博客

MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoTemplate完成增删改查_一单成的博客-CSDN博客

先放官方的文章

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()命令来更新集合的文档。仅仅更新要更新的文档,可以将条件添加到更新语句,以便更新选定的文档。

该命令中的基本参数是需要更新文档的条件,其次是需要执行的修改。

操作思路:

  1. 发出更新命令;
  2. 选择要用于确定需要更新哪个文档的条件。在我们的例子中,我们要更新员工ID为22的文档;
  3. 使用set命令修改字段名称;
  4. 选择要修改的字段名称,并相应地输入新值。
#修改员工标号为1的名字
db.ExampleDB.update({"员工编号":1}, {$set:{"员工姓名":"库库帅阿丹"}}
)

 看到表明,一条记录符合条件,一条记录修改了相关字段!!!

下面是一些update的用法

这个代码是使用 MongoDB 的 update() 函数来更新名为 "员工编号" 的字段值为 1 的文档中的 "员工姓名" 字段的值为 "库库帅阿丹"。

具体来说,update() 函数接受两个参数:

  1. 查询条件,指定要更新的文档。在这个例子中,查询条件是 {"员工编号":1},表示要更新 "员工编号" 字段值为 1 的文档。
  2. 更新操作,指定要对文档进行的更新操作。在这个例子中,更新操作为 { $set: { "员工姓名": "库库帅阿丹" } },表示要将 "员工姓名" 字段的值更新为 "库库帅阿丹"。

其中,更新操作可以使用以下几个操作符:

  • $set: 设置指定字段的值。
  • $unset: 删除指定字段。
  • $rename: 重命名指定字段。
  • $inc: 增加指定字段的值。

除了上面的示例,update() 函数还可以使用其他参数来控制更新行为,比如 multi 参数(指定是否更新多个文档)和 upsert 参数(指定是否插入新文档)。

总之,update() 函数是 MongoDB 中用于更新文档的函数,可以方便地对数据库中的文档进行修改操作。

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

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

相关文章

Celery嵌入工程的使用

文章目录 1.config 1.1 通过app.conf进行配置1.2 通过app.conf.update进行配置1.3 通过配置文件进行配置1.4 通过配置类的方式进行配置2.任务相关 2.1 任务基类(base)2.2 任务名称(name)2.3 任务请求(request)2.4 任务重试(retry) 2.4.1 指定最大重试次数2.4.2 设置重试间隔时间…

RTC晶振两端要不要挂电容

发现GD32的RTC晶振两端需要挂电容,STM32的RTC晶振两端不需要挂电容。 STM32的RTC晶振两端,不需要挂电容,这样晶振启振很容易,挂大了,却难启动,且温度越低,启动越难。 有人说负载电容为6pF的晶振…

分享21年电赛F题-智能送药小车-做题记录以及经验分享

这里写目录标题 前言一、赛题分析1、车型选择2、巡线1、OpenMv循迹2、灰度循迹 3、装载药品4、识别数字5、LED指示6、双车通信7、转向方案1、开环转向2、位置环速度环闭环串级转向3、MPU6050转向 二、调试经验分享1、循迹2、识别数字3、转向4、双车通信5、逻辑处理6、心态问题 …

IoTDB1.X windows运行失败问题的处理

在windows运行 IoTDB1.x时 会出现如图所示的问题 为什么会出现这样的问题?java没有安装还是未调用成功,我是JAVA8~11~17各种更换都未能解决问题,最后对其bat文件进行查看,发现在conf\datanode-env.bat、conf\confignode-env.bat这…

深入学习JVM —— GC垃圾回收机制

前言 前面荔枝已经梳理了有关JVM的体系结构和类加载机制,也详细地介绍了JVM在类加载时的双亲委派模型,而在这篇文章中荔枝将会比较详细地梳理有关JVM学习的另一大重点——GC垃圾回收机制的相关知识,重点了解的比如对象可达性的判断、四种回收…

uniapp+vue3项目中使用vant-weapp

创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 uni-app官网 (dcloud.net.cn) npx degit dcloudio/uni-preset-vue#vite my-vue3-project打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 yarn install 或 npm install 安装vant…

2023年上海国际车展,英信翻译提供中日英同传服务

在2023年4月上海车展期间,日产汽车展示了一系列搭载智能网联技术和电驱动技术的车型,包括首次亮相的Max-Out概念车和专为中国消费者设计的纯电动SUV概念车——日产Arizon。备受全球汽车行业瞩目。 日产是日本第二大汽车公司,也是世界十大汽车…

【山河送书第六期】:《码上行动:零基础学会Python编程( ChatGPT版)》参与活动,送书两本!!

《码上行动:零基础学会Python编程( ChatGPT版》 前言内容提要本书亮点购买链接参与方式往期赠书回顾: 前言 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖,这得益于数据科学和人工智能领域的发展,使得 Python 变得异…

Jmeter响应中的乱码问题

文章目录 问题描述解决办法 问题描述 Jmeter在访问接口的时候,响应内容如果有中文可能会显示乱码 响应页面没有做编码处理,JMeter默认按照ISO-8859-1编码格式进行解析 解决办法 在线程组中添加BeanShell PostProcessor后置处理器 prev.setDataEnco…

量化投研之如何获取所需的数据?

数据是决策和分析的基础,数据的速度、完整性非常重要。 掘金量化提供两大类数据获取方式:订阅数据获取实时数据、接口直通获取历史数据。 下面是两个方式各自的步骤介绍。 获取数据 1. 通过订阅获取高频行情数据 步骤 1、设置初始化函数: init, 使用…

基于Qlearning强化学习的路径规划算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Q值更新规则 4.2 基于Q-learning的路径规划算法设计 4.3 Q-learning路径规划流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..…

软件测试面试【富途面经分享】

目录 一面面经(1h) 二面面经 一面面经(1h) 一、对白盒黑盒灰盒测试的理解 答: 1、黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了什么事情,只能通过输入输出看是否能得到我们所需的来…

【OpenGauss源码学习 —— 执行算子(SeqScan算子)】

执行算子(SeqScan算子) 执行算子概述扫描算子SeqScan算子ExecInitSeqScan函数InitScanRelation函数ExecSeqScan函数 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵…

Javascript 正则

基本语法 定义 JavaScript种正则表达式有两种定义方式 构造函数 var regnew RegExp(<%[^%>]%>,g);字面量 var reg/<%[^%>]%>/g;g&#xff1a; global&#xff0c;全文搜索&#xff0c;默认搜索到第一个结果接停止i&#xff1a;ingore case&#xff0c;忽略…

WebRTC | 实现数据流的一对一通信

目录 一、浏览器对WebRTC的支持 二、MediaStream与MediaStreamTrack 三、RTCPeerConnection 1. RTCPeerConnection与本地音视频数据绑定 2. 媒体协商SDP 3. ICE &#xff08;1&#xff09;Candidate信息 &#xff08;2&#xff09;WebRTC收集Candidate &#xff08;3&…

【Matlab】极限学习机-遗传算法(ELM-GA)函数极值寻优——非线性函数求极值

往期博客&#x1f449; 【Matlab】BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值 【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值 【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值 【Matlab】Elman神经网络遗…

MySQL:内置函数、复合查询和内外连接

内置函数 select 函数; 日期函数 字符串函数 数学函数 其它函数 复合查询&#xff08;多表查询&#xff09; 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。本节我们用一个简单的公司管理系统&#xff0c;有三张 表EMP,DEPT,SALGRADE来演示如何进行多表查询…

无涯教程-Perl - int函数

描述 此函数返回EXPR的整数元素,如果省略则返回$_。 int函数不进行舍入。如果需要将值四舍五入为整数,则应使用sprintf。 语法 以下是此函数的简单语法- int EXPRint返回值 此函数返回EXPR的整数部分。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$int_valint…

使用Spring Initializr方式构建Spring Boot项目

除了可以使用Maven方式构建Spring Boot项目外&#xff0c;还可以通过Spring Initializr方式快速构建Spring Boot项目。从本质上说&#xff0c;Spring lnitializr是一个Web应用&#xff0c;它提供了一个基本的项目结构&#xff0c;能够帮助我们快速构建一个基础的Spring Boot项目…

Telegram营销,全球跨境电商都在研究的营销策略

Telegram 目前有7 亿月活跃用户。作为一个如此流行和广泛的即时通讯平台&#xff0c; Telegram 已成为企业和客户沟通的重要即时通讯工具。 为了使企业能够快速有效地覆盖目标受众&#xff0c;Telegram 不断改进平台&#xff0c;提供一系列功能&#xff0c;例如可定制的自动化…