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