MongoDB 简介:文档数据库与 NoSQL
本教程共 50 篇 · 第 1 篇 · 更新于 2026-07-30 · 约 5 分钟阅读
1. MongoDB 简介:文档数据库与 NoSQL
本节目标:搞懂 MongoDB 是什么、NoSQL 分哪几类、它和关系型数据库差在哪,以及什么场景适合用它。
1.1 什么是 MongoDB
MongoDB 是一个文档数据库(Document Database),用类似 JSON 的「文档(Document)」来存数据。文档由一个个字段和值组成,写起来和你代码里的对象很像。
我刚接触它时最大的感受是:终于不用先建表、定字段类型了。一条记录长这样:
// 一个用户文档(document)
{
_id: ObjectId("507f1f77bcf86cd799439011"),
name: "张伟",
age: 28,
city: "北京",
tags: ["vip", "gamer"]
}
注意字段值可以是字符串、数字、数组,甚至还能再嵌一个文档。这种灵活度是它和关系型数据库最直观的区别。
Note据 MongoDB 8.3 官方文档,MongoDB 是一个「fully-transactional operational database」,既支持灵活的文档模型,也支持多文档 ACID 事务。
1.2 什么是 NoSQL
NoSQL 不是「不要 SQL」,而是「Not Only SQL(不只是 SQL)」。它泛指一类不按传统关系表来组织数据的数据库。
传统关系型数据库(Relational Database)用「表 + 行 + 列」存数据,表结构要提前定死。NoSQL 则放宽了这些约束,常用来应对海量数据、高并发和频繁变动的结构。
1.3 NoSQL 的四大类
NoSQL 家族主要分四类,各自擅长不同的场景:
| 类型 | 中文名 | 数据形态 | 典型代表 |
|---|---|---|---|
| 键值(Key-Value) | 键值存储 | 一个键对应一个值 | Redis |
| 文档(Document) | 文档数据库 | 类 JSON 的文档 | MongoDB |
| 列族(Column-Family) | 列族存储 | 按列族组织的大表 | Cassandra |
| 图(Graph) | 图数据库 | 节点与关系 | Neo4j |
MongoDB 属于其中的「文档数据库」这一类。
1.4 文档库 vs 关系型数据库
说白了,最大的差别在「结构怎么放」。
- 关系型:订单和用户信息分两张表,靠外键(Foreign Key)关联,查询要连表(JOIN)。
- 文档型:常把相关信息嵌进同一个文档,省去了连表,读起来更快。
| 对比点 | 关系型数据库 | MongoDB |
|---|---|---|
| 数据单位 | 行(Row) | 文档(Document) |
| 表结构 | 固定 Schema | 灵活 Schema |
| 关联关系 | 外键 + JOIN | 嵌入(Embed)或引用(Reference) |
| 扩展方式 | 多为纵向扩展 | 原生支持分片横向扩展 |
Tip灵活不代表「随便存」。生产里仍然要设计好文档结构,后面「文档结构」章节会细讲。
1.5 核心能力一览
除了文档模型,MongoDB 还内置了几样常被用到的能力:
- 高可用(High Availability):通过副本集(Replica Set)自动故障转移。
- 横向扩展(Horizontal Scaling):通过分片(Sharding)把数据分布到多台机器。
- 聚合分析(Aggregation):一条管道就能做分组、统计。
- 混合检索:全文检索、地理空间、向量检索都能在同一库里做。
1.6 适用场景
MongoDB 适合这些场景:
- 数据结构经常变,比如快速迭代的互联网产品。
- 需要存半结构化或嵌套数据,如用户画像、商品属性。
- 要水平扩展(Sharding)扛住大数据量和高并发。
- 需要地理空间、全文检索、聚合分析等混合能力。
Warning如果你的业务强依赖多表事务、复杂连表和严格一致性(如银行核心账务),关系型数据库往往更顺手。选型章节会客观对比,不贬低任何一方。