Skip to main content
Version: 1.0

MongoDB 核心知识

MongoDB 是文档型 NoSQL 数据库,存储格式为 BSON(结构类似 JSON)。本篇覆盖核心特性、与 MySQL 的概念对照、典型场景、副本集高可用,最后附 5 道高频面试题详解。

1. MongoDB 是什么​

MongoDB 属于文档型 NoSQL 数据库,数据以 BSON 文档存储,结构类似 JSON——一条数据就是一个「文档」,字段名和字段值成对出现。

2. 核心特性​

  1. 无固定表结构:同一个集合里的文档字段可以不一样,字段可以随时新增、删减,不需要提前修改表结构;
  2. 支持索引,查询性能较好;
  3. 支持副本集保证数据冗余与高可用;
  4. 不适合强事务场景(早期版本无事务,现在虽支持但非强项)。

3. 概念对照 MySQL(必背)​

MongoDBMySQL说明
数据库(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 管灵活。
  • 上线三件事:开认证、建索引、配副本集。