MongoDB 概览
文档库与 Atlas。
30 分钟
MongoDB 概览
这一课你将能做到
- 说清楚 MongoDB 是什么、和 MySQL 这类关系型数据库的本质区别
- 在本机或 Atlas 上连上一个 MongoDB 7.x 实例,用 mongosh 建库、建集合、插入并查出一条文档
- 判断一个业务场景适不适合用 MongoDB,并能给出理由
为什么要学
本站的主存储是 MySQL,但很多数据天然不是「表格」形状:用户提交一份代码的判题结果,里面嵌套了测试用例数组、每条的 stdout/stderr、性能指标对象;课程进度里每个用户的「已完成课时集合」长度不一。硬塞进 MySQL 要么拆一堆关联表、要么存 JSON 字符串失去查询能力。
MongoDB 就是为这种「文档形状」的数据设计的:一条记录就是一个 BSON 文档,字段可以嵌套、可以是数组、不同文档字段可以不同。同时它在互联网厂面试里是「除了 MySQL 你还用过什么数据库」的标准答案之一,值得系统学一遍。
先建立图像
关系型 vs 文档型的对照:
MySQL(关系型) MongoDB(文档型)
┌──────────────┐ ┌─────────────────────────────┐
│ database │ │ database │
│ └─ table │ <──────────> │ └─ collection(集合) │
│ └─ row │ │ └─ document(文档) │
│ └─ col │ │ └─ field(字段) │
└──────────────┘ └─────────────────────────────┘
表结构固定(schema 强制) 结构灵活(schema-less,可校验)
JOIN 关联多表 内嵌文档为主,$lookup 为辅
一条「做题记录」在 MongoDB 里的样子:
{
"_id": ObjectId("66f1a2b3c4d5e6f708192a3b"),
"userId": 1024,
"lessonSlug": "mdbrm-intro",
"code": "db.submissions.find({userId: 1024})",
"status": "accepted",
"cases": [
{ "name": "case1", "passed": true, "costMs": 12 },
{ "name": "case2", "passed": true, "costMs": 9 }
],
"submittedAt": ISODate("2026-10-07T08:30:00Z")
}
注意:数组 cases、内嵌对象、日期、ObjectId 全部原生支持,不需要拆表。
跟着做
步骤 1:准备环境(二选一)
本地 Docker 起一个 MongoDB 7:
docker run -d --name mongo7 -p 27017:27017 mongo:7
或者注册 MongoDB Atlas 免费版(M0,512MB 存储,足够学习),拿到连接串。
安装 mongosh(官方 Shell,替代旧的 mongo shell):Windows 用 winget:
winget install MongoDB.Shell
步骤 2:连接并验证版本
mongosh "mongodb://localhost:27017"
连上后执行:
db.runCommand({ hello: 1 })
返回里能看到 maxWireVersion 和 isWritablePrimary: true,说明实例正常。
version() // 应输出 7.x.x