MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)

MongoDB是什么?

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似Json的Bson格式,因此可以存储比较复杂的数据类型。
  • MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。并且MongoDB-4.2版本开始已经支持分布式事务功能。

简而言之的话就是:MongoDB是一个文档型的NoSQL数据库,用于构建高并发、高可用和高扩展的互联网应用程序。

MongoDB概念解析(重点)

无论我们学习什么数据库都应该先了解对应数据库的基本概念,在MongoDB中基本的概念是文档、集合、数据库,下面我们挨个介绍。

MongoDB和RDBMS术语概念对比

虽然 MongoDB 与传统的 RDBMS 共享一些相同的术语,但其他一些是 NoSQL 数据库所独有的。为了帮助了解它们的分别,下表将 RDBMS 使用的术语与 MongoDB 使用的术语进行比较:

RDBMS术语/概念 MongoDB 术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 嵌入式文档 表连接,MongoDB不支持表连接只支持嵌入式文档
primary key primary key 主键,MongoDB自动将 _id 字段设置为主键(默认键 _id 由 MongoDB 提供)

通过下图实例,我们也可以更直观的的了解 MongoDB 中的一些概念:

MongoDB文档

概述:

MongoDB 的文档确实是一组键值(key-value)对(即 BSON),并且不需要设置相同的字段或相同的数据类型。这些特点使得 MongoDB 成为处理非结构化和半结构化数据的理想选择,尤其是在需要灵活性和可扩展性的应用场景中。

  • MongoDB 的文档可以理解为关系型数据库(MySQL)的一行记录。
  • MongoDB 将数据记录为 BSON 格式的文档。
  • BSON 是 JSON 文档的二进制表示,但它支持的数据类型更加丰富。

MongoDB文档由字段和值对组成,并具有以下结构:

css 复制代码
{
   field1: value1,
   field2: value2,
   field3: value3,
   ...
   fieldN: valueN
}

MongoDB Bson格式介绍

BSON 是 Binary JSON 的缩写,是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用。它和Json一样,支持内嵌的文档对象和数组对象,但是Bson有Json没有的一些数据类型,如 Date 和 BinData 类型。

JSON vs BSON

JSON的局限性,比如它只有null、布尔、数字、字符串、数组和对象这几种数据类型,没有日期类型,只有一种数字类型,无法区分浮点数和整数,也没法表示正则表达式或者函数。BSON是一种类JSON的二进制形式的存储格式,Binary JSON,支持内嵌的文档对象和数组对象,如 Date 和 BinData 类型,MongoDB 使用 BSON 作为文档数据存储和网络传输格式。

BSON的优势

  • 更丰富的数据类型:BSON扩展了JSON的数据类型,支持如日期(Date)、二进制数据(BinData)、对象ID(ObjectId)、正则表达式等,这些类型在JSON中需通过字符串或复杂结构模拟。
  • 高效的序列化/反序列化:二进制编码允许快速解析,尤其适合大规模数据操作,减少了文本解析的开销。
  • 可遍历性:BSON文档包含长度前缀等元数据,便于快速跳过无关字段,提升查询效率。

BSON的局限性

  • 可读性差:二进制格式无法直接阅读,需借助工具转换为JSON进行调试。
  • 存储空间:由于包含类型和长度信息,BSON可能比等效的JSON稍大,但效率提升通常抵消了空间成本。

BSON类型介绍

下面简单介绍一下其中几个比较重要的类型:

ObjectId:

  • 插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型的,也可以手动的插入,默认情况下它的数据类型是ObjectId,由于MongoDB在设计之初就是用作分布式数据库,所以使用ObjectId可以避免不同数据库中_id的重复(如果使用自增的方式在分布式系统中就会出现重复的_id的值)。
  • jectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程id,最后6位表示计数器。

MongoDB 采用 ObjectId 来表示主键的类型,数据库中每个文档都拥有一个_id 字段表示主键,_id 的生成规则如下:

其中包括4-byte Unix 时间戳,3-byte 机器 ID,2-byte 进程 ID,3-byte 计数器(初始化随机)。

bash 复制代码
601e2b6b aa203c c89f 2d31aa
  ↑      ↑     ↑     ↑
时间戳  机器码 进程id 计数器

String:

BSON 字符串通常为 UTF-8,在对 BSON 进行序列化和反序列化时,每种编程语言的驱动程序都会从该语言的字符串格式转换为 UTF-8,这样就可以轻松地将大多数国际字符存储在 BSON 字符串中。 此外,MongoDB $regex查询在正则表达式字符串中支持 UTF-8。

Timestamps:

BSON 具一种特殊的时间戳类型,供 MongoDB 内部使用,与常规的 Date 类型无关。此内部时间戳类型是 64 位值,其中:

  • 最高的 32 位有效位则是 time_t 值(自 UNIX 纪元以来的秒数)。
  • 对于给定秒内的操作,最低有效的 32 位是递增的 ordinal。

Date:

BSON Date(BSON 日期)是一个 64 位整数,它表示自 UNIX 纪元(1970 年 1 月 1 日)以来的毫秒数。因此,过去与未来的可表示日期范围便可达到约 2.9 亿年。

MongoDB索引种类

  • _id索引: 绝大多数集合默认建立的索引;对于每个插入的数据,mongodb都会自动生成一条唯一的_id字段。
  • 单键索引: 不自动创建,值单一,例如字符串,数字或者日期。
  • 多键索引: 不自动创建,值有多个,如数组,与单键索引创建形式相同,区别在于字段的值。
  • 复合索引: 查询条件不只一个时,需要建立复合索引。
  • 过期索引TTL: 是在一段时间后会过期的索引,索引过期后,相应的数据会删除(不仅仅是索引删除,还有数据);适用场景:在一段时间之后会时效的数据,比如用户的登陆信息、存储的日志;建立方法,db.test.ensureIndex({time:1},{expireAfterSeconds:10})秒数。其限制:存储在过期索引字段的值必须是指定的时间类型(ISODate或者其数据,不能使用时间戳,否则不能被自动删除);指定ISODate数组,则按照最小的时间进行删除;过期索引不能是复合索引;删除时间不精确(MongoDB默认60s执行一个删除过程,删除本身也需要时间)
  • 全文索引: 对字符串与字符串数组创建全文课搜索的索引。
  • 地理位置索引: 将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。

MongoDB GUI可视化工具

俗话说工欲善其事,必先利其器。选择一款高效的GUI可视化客户端管理工具,对于我们的日常开发效率都有大大的提升。下面推荐几款比较好用的MongoDB GUI可视化管理工具!

Studio 3T

Studio 3T是一款专为MongoDB设计的强大可视化工具,旨在帮助开发人员和数据库专业人员更高效地管理和操作MongoDB数据库。

Navicat for MongoDB 可简化数据库管理并增强用户与 MongoDB NoSQL 功能的交互。你可以通过响应式用户界面浏览集合和文档、可视化构建聚合管道并执行数据操作。

NoSQLBooster

NoSQLBooster 是一款适用于 MongoDB Server 3.6-8.0 的跨平台 GUI 工具,它提供基于 AI 的自然语言查询、MongoDB 脚本调试器、全面的监控工具、流畅查询链、SQL 查询、查询代码生成器、任务调度以及高级智能感应体验。

MongoDB学习路线图

参考文章

相关推荐
`林中水滴`16 小时前
MongoDB系列:MongoDB 分片集群环境搭建
mongodb
Msshu1231 天前
Type-C 多协议快充诱骗电压芯片XSP28 芯片脚耐压高达21V 电路简单 性价比高
mongodb·zookeeper·rabbitmq·flume·memcache
hexiekuaile1 天前
mongodb8.2知识
mongodb
The Sheep 20232 天前
MongoDB与.Net6
数据库·mongodb
点灯小铭2 天前
基于单片机的智能收银机模拟系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
数据知道2 天前
一文掌握 MongoDB 存储引擎 WiredTiger 的原理
数据库·mongodb·数据库架构
清风6666663 天前
基于单片机的电加热炉智能温度与液位PID控制系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
列御寇3 天前
MongoDB分片集概述
数据库·mongodb
列御寇3 天前
MongoDB分片集群——集群组件概述
数据库·mongodb
列御寇3 天前
MongoDB分片集群——mongos组件(mongos进程)
数据库·mongodb