MongoDB 入门教程
文档模型与 BSON
本教程共 50 篇 · 第 2 篇 · 更新于 2026-07-30 · 约 5 分钟阅读
MongoDBMongoDB 入门教程BSONJSON文档模型
2. 文档模型与 BSON
本节目标:理解文档长什么样、JSON 和 BSON 是什么关系,以及字段值都能有哪些形态。
2.1 文档是什么
文档(Document)是 MongoDB 里最小的数据单位,由「字段名: 值」成对组成。它和 JSON 对象很像,但底层在磁盘和内存里存的是 BSON。
2.2 JSON 与 BSON 的关系
JSON(JavaScript Object Notation)是我们写文档时看到的人类可读格式。BSON(Binary JSON)是 MongoDB 实际使用的二进制编码。
简单说:你用 JSON 写,MongoDB 用 BSON 存。BSON 在 JSON 类型基础上,增加了日期、ObjectId、Decimal128、二进制等类型。
| 对比 | JSON | BSON |
|---|---|---|
| 形态 | 文本,人能读 | 二进制,机器处理快 |
| 类型 | 字符串、数字、布尔、数组、对象、null | 在 JSON 基础上增加日期、ObjectId、Decimal128、二进制 |
| 用途 | 接口与书写 | 存储与网络传输 |
Note据 MongoDB 8.3 官方文档,MongoDB 将文档以 BSON 文档(BSON documents)形式存储在集合(Collection)中。
2.3 字段值的形态
一个字段的值可以是以下几种:
- 基本类型:字符串、数字、布尔、null
- 日期:ISODate
- 内嵌文档:
{ ... } - 数组:
[ ... ],数组里还能再放文档
// 一个既有内嵌文档、又有数组的文档
{
name: "张伟",
address: { city: "北京", district: "海淀" },
tags: ["vip", "gamer"],
registered_at: ISODate("2024-01-15T08:30:00Z")
}
2.4 为什么用 BSON 而不是纯 JSON
BSON 带来两个实在的好处:
- 类型更全。JSON 没有「日期」「二进制」原生类型,BSON 有,存时间和文件不丢精度。
- 遍历更快。二进制结构让 MongoDB 不用把整块数据解析完,就能定位字段。
Tip你平时基本感知不到 BSON,正常写 JSON 风格文档即可。只有用到日期、高精度小数时,才需要关心它。
2.5 文档和「行」的对应
如果你熟悉关系型数据库,可以这样类比:
- 一张表 ≈ 一个集合(Collection)
- 表里的一行 ≈ 集合里的一个文档
- 列名 ≈ 字段名
区别在于:同一集合里的不同文档,字段可以不一样。这就是所谓「灵活 Schema(Flexible Schema)」。
Warning灵活不等于无约束。字段名一旦写错(比如
age写成Age),查询就查不到。生产环境常用 Schema 校验来兜底,后面章节会讲到。