MongoDB
MongoDB 是文档型数据库,使用 BSON 文档保存数据。它不像关系型数据库那样强依赖固定表结构,更适合字段变化较多、文档天然聚合、读写吞吐要求较高的场景。
为什么需要 MongoDB
有些业务数据天然就是一个完整文档,例如商品详情、用户画像、文章草稿、埋点事件。它们字段多、结构会变、嵌套层级明显,如果全部拆成很多关系表,读一次详情可能要多次 join。MongoDB 允许把经常一起读取的数据放在同一个文档里,读取时更贴近业务对象。
但 MongoDB 不是“不用设计表结构”。如果文档无限增长、索引缺失、字段命名混乱,性能和维护成本一样会失控。
核心概念
| MongoDB | 类比关系型数据库 | 说明 |
|---|---|---|
| database | database | 数据库 |
| collection | table | 集合 |
| document | row | 文档 |
| field | column | 字段 |
| index | index | 索引 |
文档模型
mermaid
flowchart TD
A[Database] --> B[Collection: user]
B --> C[Document 1]
B --> D[Document 2]
C --> E[name/age/address/tags]目录
- MongoDB 从零到生产级掌握:按文档模型、索引、聚合、副本集、分片、事务和排查建立完整学习主线。
- MongoDB 从零到精通验收清单:逐项检查是否真的懂文档建模、查询执行、索引、聚合、副本集、分片、事务和生产排查。
- MongoDB 商业场景训练营:用医疗数据资产、索引、聚合、副本集、分片和事务场景串起生产落地。
- MongoDB 基础:文档、集合、增删改查。
- MongoDB 核心全过程原理:把文档模型、查询、写入、副本集、分片、事务和排查串起来。
- MongoDB 高级:索引、聚合、复制集、分片。
- MongoDB 面试:标准回答和知识点跳转。
如果你想检查自己是否真的从零基础学懂到能面试、能落地、能排查,按 MongoDB 从零到精通验收清单 逐项验收。它会把 BSON、文档建模、嵌入引用、索引、explain、聚合、副本集、分片、事务和商业选型串起来。
适合场景
- 商品详情、用户画像这类字段变化较多的数据。
- 日志、埋点、事件数据。
- 内容管理系统。
- 需要保存嵌套结构的业务对象。
不适合场景
- 强事务、强关联、多表复杂 join 的核心交易系统。
- 数据结构非常稳定并且高度关系化的业务。
- 需要大量跨集合复杂查询的场景。
读写流程
mermaid
flowchart TD
A["应用请求"] --> B["MongoDB Driver"]
B --> C["目标 Collection"]
C --> D{"是否命中索引?"}
D -->|是| E["快速定位文档"]
D -->|否| F["扫描集合"]
E --> G["返回 BSON 文档"]
F --> G学习建议:先掌握文档模型和基础 CRUD,再学习索引和聚合。MongoDB 的重点不是“完全不设计结构”,而是根据查询方式设计合理文档。
命令 Demo:创建集合并查询
javascript
use blog
db.article.insertOne({
title: "MongoDB 入门",
author: "Tom",
tags: ["database", "mongodb"],
createdAt: new Date()
})
db.article.createIndex({ title: 1 })
db.article.find({
title: /MongoDB/
})这个 Demo 覆盖了 MongoDB 入门最核心的操作:选择数据库、插入文档、创建索引、按条件查询。
常见风险
| 风险 | 后果 | 建议 |
|---|---|---|
| 把 MongoDB 当成随便存 JSON | 字段混乱,查询和维护困难 | 维护集合字段规范 |
| 不建索引 | 大集合查询变成全表扫描 | 用 explain 验证索引命中 |
| 无限数组放入单文档 | 文档越来越大,更新变慢 | 无限增长数据拆集合 |
| 跨集合复杂关联很多 | 应用层 join 成本高 | 强关系业务优先考虑关系库 |
