跳到主要内容

MongoDB

MongoDB 面试八股。考法和 MySQL 很不一样:MySQL 考机制细节(MVCC 怎么判可见性、锁加在哪),MongoDB 考架构与设计决策(分片键怎么选、文档该嵌入还是引用、什么场景不该用它)。

:::tip 速览 一条主线:文档模型让「一次查询拿到完整对象」成为可能,所以设计的第一原则是「按访问模式建模」而不是按范式拆表;WiredTiger 提供文档级并发和 MVCC,所以写入不再互相阻塞;副本集提供高可用、分片提供水平扩展,两者正交,生产是「分片集群里每个分片都是副本集」。

最该记住的一句话:MongoDB 不是「不需要设计 schema」,而是「schema 设计从写入时转移到了应用层」。 :::

条目核心问题
基础与文档模型BSON、_id 与 ObjectId、与关系模型的概念映射
存储引擎 WiredTigerB+ 树、文档级锁、MVCC、checkpoint 与 journal
索引索引类型、ESR 规则、覆盖查询、explain 怎么读
聚合管道常用 stage、$lookup、内存限制、优化
副本集与高可用oplog、选举、readPreference、writeConcern
分片集群mongos / config server、chunk、分片键选择
事务多文档事务、快照隔离、为什么应尽量避免
数据建模嵌入 vs 引用、设计模式、反模式
与 MySQL 的区别逐维度对比 + 选型决策

高频开场题​

MongoDB 是什么? 面向文档的 NoSQL 数据库,数据以类 JSON 的 BSON 文档存储,同一个集合里的文档可以有不同的字段。它在 CAP 里偏向 CP(副本集通过多数派保证一致性),但通过 readPreference / writeConcern 可以在一致性和可用性之间调节。

为什么选 MongoDB? 四个真实理由:

  1. schema 灵活 —— 字段频繁变化、或不同记录字段差异大(商品属性、埋点日志、第三方 API 返回)时,关系表要么大量 NULL 列要么频繁 DDL
  2. 嵌套结构天然 —— 一个订单及其明细、一篇文章及其标签,一次读写搞定,不用 JOIN
  3. 水平扩展内置 —— 分片是官方功能,不需要自己做分库分表中间件
  4. 开发效率 —— 文档结构和应用对象几乎一一对应,没有 ORM 阻抗失配

什么场景不该用? 这题比上一题更能体现判断力:

  • 强事务 + 复杂关联(银行转账、ERP)—— 虽然 4.0+ 支持多文档事务,但性能和成熟度不如 MySQL,且复杂 JOIN 用 $lookup 很别扭
  • 固定 schema 的结构化数据 —— 用了也没好处,反而失去约束带来的数据质量保障
  • 重度 BI / 即席分析 —— 聚合管道写复杂分析比 SQL 痛苦得多,这类需求应该同步到数仓
  • 团队不熟 —— 建模不当的 MongoDB 比正常的 MySQL 糟糕得多,而建模错误的修复成本很高

:::note 关于本模块的内容来源 以下内容是公开流传的 MongoDB 面试题整理,覆盖大厂(腾讯 / 百度 / 字节等)常考的方向。按主题而非按公司组织 —— 同一个知识点在不同公司只是问法不同,按主题成体系地理解比背题目列表更有用。标 🔥 的是出现频率最高的。 :::

🔥 最高频的八个问题​

问题去哪看
MongoDB 和 MySQL 的区别,什么时候用哪个与 MySQL 的区别
为什么说 MongoDB 写入快?存储引擎
索引用的什么数据结构?和 MySQL 的区别?索引
分片键怎么选?选错了会怎样?分片集群
副本集怎么选主?脑裂怎么防?副本集与高可用
什么时候嵌入、什么时候引用?数据建模
MongoDB 支持事务吗?ACID 吗?事务
单文档 16MB 限制怎么绕?数据建模