Skip to content

第八章 MongoDB 详解 ​


1. NoSQL 与 MongoDB 概述 ​

在传统关系型数据库占据主流地位的数十年间,随着互联网规模的爆发式增长,越来越多的场景对数据的灵活性、水平扩展能力和高吞吐提出了新的要求。NoSQL(Not Only SQL)数据库应运而生,MongoDB 是其中最具代表性的文档型数据库之一。理解 MongoDB 有助于拓展对数据存储范式的认知。

1.1 NoSQL 的兴起背景 ​

关系型数据库以严格的模式(Schema)和 ACID 事务著称,但在以下场景中面临挑战:

  • 模式演进频繁:业务快速迭代时,表结构变更成本高。
  • 水平扩展困难:单机性能瓶颈难以通过简单加机器解决。
  • 高并发写入:关系型数据库的锁机制在极高并发下成为瓶颈。
  • 半结构化数据:JSON、嵌套对象等非表结构数据在关系模型中需要拆表或使用 JSON 列。

NoSQL 数据库通过放宽部分约束,换取更好的灵活性和扩展性。根据数据模型,NoSQL 可分为键值型(如 Redis)、文档型(如 MongoDB)、列族型(如 HBase)和图数据库(如 Neo4j)。

1.2 MongoDB 简介 ​

MongoDB 由 10gen 公司(现 MongoDB Inc.)于 2009 年发布,是一个基于分布式文件存储的开源文档型数据库。其名称源自英文 "humongous"(巨大的),寓意处理海量数据。MongoDB 使用 BSON(Binary JSON)存储文档,支持丰富的查询和聚合能力,被广泛应用于内容管理、用户画像、日志分析、物联网等场景。

学习 MongoDB 时,最大的认知转换并不是把 SQL 换成一套新的命令,而是把数据组织方式从“以表为中心”切换为“以文档对象为中心”。关系模型通常先识别实体和联系,再通过规范化把事实拆分到不同表中;文档模型则更强调围绕一个业务对象,把经常一起读取的数据组织成一个整体文档。只要真正完成这种思维切换,后续关于嵌入、引用、聚合和分片的知识点才会连成体系。

1.3 MongoDB 核心概念对照 ​

关系型数据库MongoDB
数据库 (Database)数据库 (Database)
表 (Table)集合 (Collection)
行 (Row)文档 (Document)
列 (Column)字段 (Field)
主键 (Primary Key)_id 字段(自动生成)
外键 (Foreign Key)嵌入文档或引用(由应用维护)

2. MongoDB 安装与连接 ​

2.1 安装方式 ​

  • Linux:按官方文档添加 MongoDB 源后,使用 apt 或 yum 安装。
  • Windows:下载 MSI 安装包,按向导完成安装。
  • macOS:brew tap mongodb/brew && brew install mongodb-community。
  • Docker:docker run -d -p 27017:27017 mongo。

2.2 启动服务 ​

安装后需启动 mongod 服务。默认数据目录为 /data/db(Linux/macOS)或安装目录下的 data(Windows),监听端口 27017。

2.3 连接 MongoDB ​

使用 mongosh(MongoDB Shell,6.0+)或旧版 mongo 连接:

bash
mongosh                    # 连接本地
mongosh "mongodb://localhost:27017"
mongosh "mongodb://user:pass@host:27017/mydb"  # 带认证

连接成功后进入 test> 提示符。

MongoDB 的连接方式看似和其他数据库差不多,真正需要注意的是它常常天然处在分布式和多节点环境中。因此,连接串不仅仅是“怎么登录”的问题,还可能隐含认证方式、读偏好、副本集名称和目标数据库等配置。教材里先把单节点连接讲清楚,是为了让读者后续理解副本集和分片时,知道客户端其实一直在和一个可能会变化的集群入口打交道,而不只是固定的一台服务器。


3. 数据库与集合操作 ​

3.1 创建与切换数据库 ​

3.2 删除数据库 ​

3.3 集合操作 ​

4. 文档与 BSON ​

4.1 BSON 简介 ​

4.2 文档结构 ​

4.3 _id 字段 ​

5. 插入文档 ​

5.1 insertOne 与 insertMany ​

5.2 插入选项 ​

6. 查询文档 ​

6.1 find 基本用法 ​

6.2 条件查询 ​

6.3 条件操作符汇总 ​

6.4 数组查询 ​

6.5 嵌套文档查询 ​

7. 更新文档 ​

7.1 updateOne 与 updateMany ​

7.2 更新操作符 ​

7.3 upsert ​

8. 删除文档 ​

9. 投影、排序与分页 ​

9.1 投影 ​

9.2 排序 (sort) ​

9.3 分页 (limit, skip) ​

10. 聚合框架 (Aggregation) ​

10.1 常用阶段 ​

10.2 聚合示例 ​

11. 索引 ​

11.1 创建索引 ​

11.2 索引类型 ​

11.3 索引管理 ​

12. 复制与分片 ​

12.1 副本集 (Replica Set) ​

12.2 分片 (Sharding) ​

13. 备份、恢复与监控 ​

13.1 备份 ​

13.2 监控 ​

14. 与关系型数据库的选型对比 ​