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 源后,使用 aptyum 安装。
  • Windows:下载 MSI 安装包,按向导完成安装。
  • macOSbrew tap mongodb/brew && brew install mongodb-community
  • Dockerdocker 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. 与关系型数据库的选型对比