MongoDB 核心知识
MongoDB 是文档型 NoSQL 数据库,存储格式为 BSON(结构类似 JSON)。本篇覆盖核心特性、与 MySQL 的概念对照、典型场景、副本集高可用,最后附 5 道高频面试题详解。
1. MongoDB 是什么
MongoDB 属于文档型 NoSQL 数据库,数据以 BSON 文档存储,结构类似 JSON——一条数据就是一个「文档」,字段名和字段值成对出现。
2. 核心特性
- 无固定表结构:同一个集合里的文档字段可以不一样,字段可以随时新增、删减,不需要提前修改表结构;
- 支持索引,查询性能较好;
- 支持副本集保证数据冗余与高可用;
- 不适合强事务场景(早期版本无事务,现在虽支持但非强项)。
3. 概念对照 MySQL(必背)
| MongoDB | MySQL | 说明 |
|---|---|---|
| 数据库(database) | 数据库(database) | 相同 |
| 集合(collection) | 表(table) | 无固定结构 |
| 文档(document) | 行(row) | BSON 格式,类似 JSON 对象 |
一句话:集合对应表、文档对应行,文档天然自带字段结构,行结构则由表定义约束。
4. 典型业务场景
适合:
- 用户行为日志、埋点数据存储(写入量大、结构多变);
- 内容类业务:文章、评论(字段灵活、有嵌套结构);
- 物联网设备上报数据(设备型号不同字段不同);
- 业务需求频繁变动、字段经常调整的业务(不用改表结构)。
不适合:
- 金融交易这类强事务、强一致性业务——选 MySQL。
5. 副本集(面试重点)
副本集(Replica Set)是 MongoDB 的高可用方案,由三类角色组成:
| 角色 | 职责 |
|---|---|
| 主节点(Primary) | 接收所有写入操作 |
| 从节点(Secondary) | 同步主节点数据,可分担读请求 |
| 仲裁节点(Arbiter,可选) | 不存储数据,只参与投票 |
工作机制: 主节点故障时,副本集自动选举新主,客户端自动切换,实现高可用、防止单点故障。
6. 生产使用注意点
- 默认没有账号权限,上线必须开启身份认证(创建用户 + 开启 auth);
- 合理创建索引——没有索引的查询是全集合扫描,会很慢;
- 做好副本集,防止单点故障。
7. 选型对比
MongoDB vs MySQL 怎么选?
| 数据特征 | 选择 |
|---|---|
| 数据结构固定、需要事务、多表复杂查询 | MySQL |
| 数据结构灵活、写入量大、日志类数据 | MongoDB |
MongoDB vs Redis 怎么选?
- Redis:内存型,主打高速缓存,数据量小、要求极快读写;
- MongoDB:磁盘存储为主,用来持久化存储文档数据,数据量大、结构灵活。
一句话:Redis 是「快的缓存」,MongoDB 是「灵活的存储」,两者不冲突,很多业务同时使用。
8. MongoDB 面试题精讲(5 题)
1. MongoDB 属于什么类型数据库?和 MySQL 最核心的差别是什么?
答: MongoDB 属于文档型 NoSQL 数据库,数据以 BSON 文档存储。和 MySQL 最核心的差别在数据模型:MySQL 是关系型、预先定义表结构、行列严格约束;MongoDB 无固定结构,同一集合的文档字段可以不同、随时增减字段,灵活性高但缺少强关系约束和强事务能力。
2. MongoDB 的数据库、集合、文档对应 MySQL 里的什么概念?
答: 数据库对应数据库;集合(collection)对应表(table);文档(document)对应行(row)。区别在于集合不要求文档结构一致,而表结构由 schema 严格定义。
3. MongoDB 副本集由哪些角色组成?仲裁节点的作用是什么?
答: 副本集由**一个主节点(Primary)、多个从节点(Secondary)和可选的仲裁节点(Arbiter)**组成。主节点负责接收写入,从节点同步数据;主节点故障时自动选举新主实现高可用。仲裁节点不存储数据,只参与选举投票——作用是在偶数节点时提供额外一票,帮助选举快速达成多数派,同时节省资源(不需要承担数据存储)。
4. MongoDB 适合什么业务场景?不适合什么场景?
答: 适合:数据结构灵活多变、写入量大、不需要强事务的场景,如用户行为日志、埋点数据、文章评论等内容类业务、物联网设备上报数据。不适合:金融交易等强事务、强一致性要求的业务,这类场景应选 MySQL。
5. MongoDB 和 Redis 怎么选型?
答: Redis 是内存型数据库,主打高速读写,适合缓存、会话、计数等小数据量高频读写场景;MongoDB 磁盘存储为主,适合持久化存储大体量、结构灵活的文档数据(日志、内容)。两者定位不同:Redis 解决「快」,MongoDB 解决「灵活存储」,实践中常组合使用——Redis 做缓存、MongoDB 做文档数据落地。
本篇速记
- MongoDB = 文档型 NoSQL,BSON 存储,字段灵活免改表。
- 集合 ≈ 表,文档 ≈ 行。
- 副本集:主写从同步,故障自动选主;仲裁节点不存数据只投票。
- 日志/埋点/内容选 MongoDB,强事务选 MySQL;Redis 管快、MongoDB 管灵活。
- 上线三件事:开认证、建索引、配副本集。