MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
<h2>前言</h2><p>上一章节主要概述了MongoDB的优劣势、应用场景和发展史。这一章节将快速的概述一下MongoDB的基本概念,带领大家快速入门MongoDB这个文档型的NoSQL数据库。</p>
<h2>MongoDB从入门到实战的相关教程</h2>
<p>MongoDB从入门到实战之MongoDB简介👉</p>
<p>MongoDB从入门到实战之MongoDB快速入门👉</p>
<h2>YyFlight.ToDoList项目源码地址</h2>
<blockquote>
<p>GitHub地址:https://github.com/YSGStudyHards/YyFlight.ToDoList</p>
</blockquote>
<h2 data-tool="mdnice编辑器"><span>MongoDB是什么?</span></h2>
<ul class="list-paddingleft-1">
<li><span>MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。</span></li>
<li><span>MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似Json的Bson格式,因此可以存储比较复杂的数据类型。</span></li>
<li><span>MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。并且MongoDB-4.2版本开始已经支持分布式事务功能。</span></li>
</ul>
<blockquote>
<p><span>简而言之的话就是:MongoDB是一个文档型的NoSQL数据库,用于构建高并发、高可用和高扩展的互联网应用程序。</span></p>
</blockquote>
<h2 data-tool="mdnice编辑器"><span>MongoDB概念解析(重点)</span></h2>
<p data-tool="mdnice编辑器"><span>无论我们学习什么数据库都应该先了解对应数据库的基本概念,在MongoDB中基本的概念是文档、集合、数据库,下面我们挨个介绍。</span></p>
<h3 data-tool="mdnice编辑器"><span>MongoDB和RDBMS术语概念对比</span></h3>
<p data-tool="mdnice编辑器"><span>虽然 MongoDB 与传统的 RDBMS 共享一些相同的术语,但其他一些是 NoSQL 数据库所独有的。为了帮助了解它们的分别,下表将 RDBMS 使用的术语与 MongoDB 使用的术语进行比较:</span></p>
<table>
<thead>
<tr><th><span>RDBMS术语/概念</span></th><th><span>MongoDB 术语/概念</span></th><th><span>解释/说明</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>database</span></td>
<td><span>database</span></td>
<td><span>数据库</span></td>
</tr>
<tr>
<td><span>table</span></td>
<td><span>collection</span></td>
<td><span>数据库表/集合</span></td>
</tr>
<tr>
<td><span>row</span></td>
<td><span>document</span></td>
<td><span>数据记录行/文档</span></td>
</tr>
<tr>
<td><span>column</span></td>
<td><span>field</span></td>
<td><span>数据字段/域</span></td>
</tr>
<tr>
<td><span>index</span></td>
<td><span>index</span></td>
<td><span>索引</span></td>
</tr>
<tr>
<td><span>table joins</span></td>
<td><span>嵌入式文档</span></td>
<td><span>表连接,MongoDB不支持表连接只支持嵌入式文档</span></td>
</tr>
<tr>
<td><span>primary key</span></td>
<td><span>primary key</span></td>
<td><span>主键,MongoDB自动将 <code>_id</code><span> 字段设置为主键(默认键 <code>_id</code><span> 由 MongoDB 提供)</span></span></span></td>
</tr>
</tbody>
</table>
<p data-tool="mdnice编辑器"><span>通过下图实例,我们也可以更直观的的了解 MongoDB 中的一些概念:</span></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202504/1336199-20250421225339592-2099945511.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器"><span>MongoDB文档</span></h2>
<h3 data-tool="mdnice编辑器"><span>概述:</span></h3>
<p data-tool="mdnice编辑器"><span>MongoDB 的文档确实是一组键值(key-value)对(即 BSON),并且不需要设置相同的字段或相同的数据类型。这些特点使得 MongoDB 成为处理非结构化和半结构化数据的理想选择,尤其是在需要灵活性和可扩展性的应用场景中。</span></p>
<ul class="list-paddingleft-1">
<li><span>MongoDB 的文档可以理解为关系型数据库(MySQL)的一行记录。</span></li>
<li><span>MongoDB 将数据记录为 BSON 格式的文档。</span></li>
<li><span>BSON 是 JSON 文档的二进制表示,但它支持的数据类型更加丰富。</span></li>
</ul>
<h3><strong>MongoDB文档由字段和值对组成,并具有以下结构:</strong></h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}</span></pre>
</div>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221029153940392-1969171397.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器"><span>MongoDB Bson格式介绍</span></h2>
<p data-tool="mdnice编辑器"><span>BSON 是 Binary JSON 的缩写,是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用。它和Json一样,支持内嵌的文档对象和数组对象,但是Bson有Json没有的一些数据类型,如Date和BinData类型。</span></p>
<h3 data-tool="mdnice编辑器"><span>JSON vs BSON</span></h3>
<p data-tool="mdnice编辑器"><span>JSON的局限性,比如它只有null、布尔、数字、字符串、数组和对象这几种数据类型,没有日期类型,只有一种数字类型,无法区分浮点数和整数,也没法表示正则表达式或者函数。BSON是一种类JSON的二进制形式的存储格式,Binary JSON,支持内嵌的文档对象和数组对象,如 Date 和 BinData 类型,MongoDB 使用 BSON 做为文档数据存储和网络传输格式。</span></p>
<h3 data-tool="mdnice编辑器"><span>BSON的优势</span></h3>
<ul class="list-paddingleft-1">
<li><span>更丰富的数据类型:BSON扩展了JSON的数据类型,支持如日期(Date)、二进制数据(BinData)、对象ID(ObjectId)、正则表达式等,这些类型在JSON中需通过字符串或复杂结构模拟。</span></li>
<li><span>高效的序列化/反序列化:二进制编码允许快速解析,尤其适合大规模数据操作,减少了文本解析的开销。</span></li>
<li><span>可遍历性:BSON文档包含长度前缀等元数据,便于快速跳过无关字段,提升查询效率。</span></li>
</ul>
<h3 data-tool="mdnice编辑器"><span>BSON的局限性</span></h3>
<ul class="list-paddingleft-1">
<li><span>可读性差:二进制格式无法直接阅读,需借助工具转换为JSON进行调试。</span></li>
<li><span>存储空间:由于包含类型和长度信息,BSON可能比等效的JSON稍大,但效率提升通常抵消了空间成本。</span></li>
</ul>
<h2 data-tool="mdnice编辑器"><span>BSON类型介绍</span></h2>
<ul class="list-paddingleft-1">
<li>官方BSON类型详细介绍:https://www.mongodb.com/zh-cn/docs/manual/reference/bson-types</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202504/1336199-20250421225438352-1756649612.png" alt="" loading="lazy"></p>
<p> </p>
<h3 data-tool="mdnice编辑器"><span>下面简单介绍一下其中几个比较重要的类型:</span></h3>
<p data-tool="mdnice编辑器"><strong>ObjectId:</strong></p>
<ul class="list-paddingleft-1">
<li><span>插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型的,也可以手动的插入,默认情况下它的数据类型是ObjectId,由于MongoDB在设计之初就是用作分布式数据库,所以使用ObjectId可以避免不同数据库中_id的重复(如果使用自增的方式在分布式系统中就会出现重复的_id的值)。</span></li>
<li><span>jectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程id,最后6位表示计数器。</span></li>
</ul>
<p data-tool="mdnice编辑器"><span>MongoDB 采用 ObjectId 来表示主键的类型,数据库中每个文档都拥有一个_id 字段表示主键,_id 的生成规则如下:</span></p>
<blockquote>
<p><span>其中包括4-byte Unix 时间戳,3-byte 机器 ID,2-byte 进程 ID,3-byte 计数器(初始化随机)。</span></p>
</blockquote>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202504/1336199-20250421225502202-1789485691.png" alt="" loading="lazy"></p>
<p> </p>
<pre data-tool="mdnice编辑器"><span data-cacheurl="" data-remoteid="" data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_svg/9M0PhLTmTIfzNFlBn3E31TNNK3SlhXyTvRRY75aCYIqj8GRgwFRbARAwXcCWOGAeVgFKRSsIXcyeo1KVK1uIzgZESyxjznTo/640?wx_fmt=svg&from=appmsg" data-fail="0"><code><span>601e2b6b aa203c c89f 2d31aa<span><br><span> ↑ ↑ ↑ ↑<span><br><span>时间戳 机器码 进程id 计数器<span><br></span></span></span></span></span></span></code></span></pre>
<p data-tool="mdnice编辑器"><strong>String:</strong></p>
<p data-tool="mdnice编辑器"><span>BSON 字符串通常为 UTF-8,在对 BSON 进行序列化和反序列化时,每种编程语言的驱动程序都会从该语言的字符串格式转换为 UTF-8,这样就可以轻松地将大多数国际字符存储在 BSON 字符串中。 此外,MongoDB $regex查询在正则表达式字符串中支持 UTF-8。</span></p>
<p data-tool="mdnice编辑器"><strong>Timestamps:</strong></p>
<p data-tool="mdnice编辑器"><span>BSON 具一种特殊的时间戳类型,供 MongoDB 内部使用,与常规的 Date 类型无关。此内部时间戳类型是 64 位值,其中:</span></p>
<ul class="list-paddingleft-1">
<li><span>最高的 32 位有效位则是 time_t 值(自 UNIX 纪元以来的秒数)。</span></li>
<li><span>对于给定秒内的操作,最低有效的 32 位是递增的 ordinal。</span></li>
</ul>
<p data-tool="mdnice编辑器"><strong>Date:</strong></p>
<p data-tool="mdnice编辑器"><span>BSON Date(BSON 日期)是一个 64 位整数,它表示自 UNIX 纪元(1970 年 1 月 1 日)以来的毫秒数。因此,过去与未来的可表示日期范围便可达到约 2.9 亿年。</span></p>
<h2>MongoDB索引种类:</h2>
<ol>
<li>_id索引:绝大多数集合默认建立的索引;对于每个插入的数据,mongodb都会自动生成一条唯一的_id字段。</li>
<li>单键索引:不自动创建,值单一,例如字符串,数字或者日期。</li>
<li>多键索引:不自动创建,值有多个,如数组,与单键索引创建形式相同,区别在于字段的值。</li>
<li>复合索引:查询条件不只一个时,需要建立复合索引。</li>
<li>过期索引TTL:是在一段时间后会过期的索引,索引过期后,相应的数据会删除(不仅仅是索引删除,还有数据);适用场景:在一段时间之后会时效的数据,比如用户的登陆信息、存储的日志;建立方法,db.test.ensureIndex({time:1},{expireAfterSeconds:10})秒数。其限制:存储在过期索引字段的值必须是指定的时间类型(ISODate或者其数据,不能使用时间戳,否则不能被自动删除);指定ISODate数组,则按照最小的时间进行删除;过期索引不能是复合索引;删除时间不精确(MongoDB默认60s执行一个删除过程,删除本身也需要时间)</li>
<li>全文索引:对字符串与字符串数组创建全文课搜索的索引。</li>
<li>地理位置索引:将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。</li>
</ol>
<h2 data-tool="mdnice编辑器"><span>MongoDB索引种类</span></h2>
<ul class="list-paddingleft-1">
<li><strong>_id索引:</strong><span> 绝大多数集合默认建立的索引;对于每个插入的数据,mongodb都会自动生成一条唯一的_id字段。</span></li>
<li><strong>单键索引:</strong><span> 不自动创建,值单一,例如字符串,数字或者日期。</span></li>
<li><strong>多键索引:</strong><span> 不自动创建,值有多个,如数组,与单键索引创建形式相同,区别在于字段的值。</span></li>
<li><strong>复合索引:</strong><span> 查询条件不只一个时,需要建立复合索引。</span></li>
<li><strong>过期索引TTL:</strong><span> 是在一段时间后会过期的索引,索引过期后,相应的数据会删除(不仅仅是索引删除,还有数据);适用场景:在一段时间之后会时效的数据,比如用户的登陆信息、存储的日志;建立方法,db.test.ensureIndex({time:1},{expireAfterSeconds:10})秒数。其限制:存储在过期索引字段的值必须是指定的时间类型(ISODate或者其数据,不能使用时间戳,否则不能被自动删除);指定ISODate数组,则按照最小的时间进行删除;过期索引不能是复合索引;删除时间不精确(MongoDB默认60s执行一个删除过程,删除本身也需要时间)</span></li>
<li><strong>全文索引:</strong><span> 对字符串与字符串数组创建全文课搜索的索引。</span></li>
<li><strong>地理位置索引:</strong><span> 将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。</span></li>
</ul>
<h2 data-tool="mdnice编辑器"><span>MongoDB GUI可视化工具</span></h2>
<p data-tool="mdnice编辑器"><span>俗话说工欲善其事,必先利其器。选择一款高效的GUI可视化客户端管理工具,对于我们的日常开发效率都有大大的提升。下面推荐几款比较好用的MongoDB GUI可视化管理工具!</span></p>
<h3><span class="content">MongoDB Compass</span></h3>
<p>MongoDB Compass 是 MongoDB 官方推出的 GUI 可视化管理工具,功能有限。免费简洁,不支持 SQL 查询,支持性能监控。适用于 Windows,macOS 和 Linux 系统。</p>
<ul>
<li>https://www.mongodb.com/zh-cn/products/tools/compass</li>
</ul>
<h3 data-tool="mdnice编辑器"><span>Studio 3T</span></h3>
<p data-tool="mdnice编辑器"><span>Studio 3T是一款专为MongoDB设计的强大可视化工具,旨在帮助开发人员和数据库专业人员更高效地管理和操作MongoDB数据库。</span></p>
<ul class="list-paddingleft-1">
<li>下载地址:https://studio3t.com/download</li>
</ul>
<h3 data-tool="mdnice编辑器"><span>Navicat for MongoDB</span></h3>
<p data-tool="mdnice编辑器"><span>Navicat for MongoDB 可简化数据库管理并增强用户与 MongoDB NoSQL 功能的交互。你可以通过响应式用户界面浏览集合和文档、可视化构建聚合管道并执行数据操作。</span></p>
<ul class="list-paddingleft-1">
<li>官网下载地址:http://www.navicat.com.cn/download/navicat-for-mongodb</li>
<li>在 Navicat for MongoDB 使用文档:https://www.navicat.com.cn/company/aboutus/blog/257-working-with-documents-in-navicat-for-mongodb</li>
</ul>
<h3 data-tool="mdnice编辑器"><span>NoSQLBooster</span></h3>
<p data-tool="mdnice编辑器"><span>NoSQLBooster 是一款适用于 MongoDB Server 3.6-8.0 的跨平台 GUI 工具,它提供基于 AI 的自然语言查询、MongoDB 脚本调试器、全面的监控工具、流畅查询链、SQL 查询、查询代码生成器、任务调度以及高级智能感应体验。</span></p>
<ul class="list-paddingleft-1">
<li>下载地址:https://nosqlbooster.com/downloads</li>
</ul>
<h2 data-tool="mdnice编辑器"><span>MongoDB学习路线图</span></h2>
<ul class="list-paddingleft-1">
<li>原址查看详细描述:https://roadmap.sh/mongodb</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202504/1336199-20250423013612756-1751344301.png" alt="" loading="lazy"></p>
<h2>参考文章</h2>
<ul>
<li>https://www.mongodb.org.cn/tutorial/6.html</li>
</ul>
<div id="gtx-trans" style="position: absolute; left: 27px; top: 5459.38px"> </div>
</div>
<div id="MySignature" role="contentinfo">
<blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/16804415.html
頁:
[1]