MongoDB 核心知识点(面试 + 开发全覆盖,精简干货)
一、基础核心概念对应对标 MySQL数据库 (Database) ≈ 库集合 (Collection) ≈ 表文档 (Document) ≈ 行数据字段 (Field) ≈ 列BSON二进制 JSON支持日期、ObjectId、正则、二进制等默认主键每个文档自动生成_idObjectId 类型12 字节时间戳 机器码 进程 ID 自增计数器_id 自带唯一主键索引二、常用数据类型基本String、Int、Long、Double、Boolean特殊ObjectId、Date、Array、Object (嵌套文档)、Null业务常用Decimal128金额高精度三、增删改查 CRUD1. 新增insertOne/insertMany特点不指定_id 自动生成集合不存在自动创建2. 查询find()查多条 /findOne()查单条条件$eq/$ne/$gt/$lt/$gte/$lte/$in/$nin逻辑$and/$or/$not/$nor分页skip() limit()大数据禁用 skip用游标分页 / 时间戳分页投影只返回指定字段{name:1,_id:0}3. 更新updateOne/updateMany操作符$set(更新字段)、$inc(自增)、$push/$addToSet(数组)upsert:true不存在则插入存在则更新定时同步高频用4. 删除deleteOne/deleteMany生产建议逻辑删除加isDeleted字段四、索引高频重点索引类型单字段索引、复合索引、唯一索引、稀疏索引、TTL 索引、文本索引、地理索引、哈希索引主键索引_id强制唯一索引不可删除唯一索引db.col.createIndex({phone:1},{unique:true})复合索引最左匹配原则建立(a,b,c)查询 a /ab /abc 走索引查 b、c 不走索引失效场景正则左模糊/key/、函数运算、字段类型隐式转换、or 无索引、超大 in** explain ()** 分析执行计划看IXSCAN(走索引)/COLLSCAN(全表扫描)五、聚合查询 Aggregation业务常用管道操作$match过滤、$project投影、$group分组、$lookup联表查询、$sort排序、$limit做报表、数据统计、关联查询、结构化组装知识图谱映射常用六、事务MongoDB 4.0 支持副本集事务4.2 支持分片集群事务满足 ACID适合强一致性业务七、集群架构重点你问过分片1. 三大角色Shard分片节点存储真实数据Config Server配置节点存分片元数据、路由规则Mongos路由节点统一入口接收业务请求2. 分片核心概念分片键集合拆分依据字段片键策略范围分片有序易写热点哈希分片数据均匀打散生产推荐Chunk数据块默认 64MB自动分裂迁移3. 分片 唯一索引 关键结论你刚才问的普通字段唯一索引跨分片全局不生效分片键 建唯一索引全局唯一生效哈希分片键 不能创建 unique 唯一索引_id 主键索引可作为分片键范围分片可唯一哈希分片不保证全局唯一八、存储引擎WiredTiger默认文档级锁、压缩、缓存、高并发废弃MMAPv1表级锁低并发九、性能优化避免大文档、嵌套过深、数组无限膨胀禁用 skip 深分页用update_time _id游标分页合理建索引避免索引过多写入变慢批量操作bulkWrite批量增删改读写分离副本集从库做查询、统计十、高频面试 / 开发易错点MongoDB 是文档型 NoSQL非关系型弱事务新版支持集合无固定结构字段可动态增减复合索引遵循最左前缀分片集群下非分片键唯一索引失效TTL 索引自动过期删除数据日志、临时数据_id时间有序直接当分片键会产生写入热点十一、贴合你的业务场景定时增量同步依赖update_time upsert知识图谱建模Mongo 文档存实体 / 简单关系复杂关系转图库大数据量必开分片 哈希分片键数据唯一性业务唯一 ID 唯一索引或依托分片键保证全局唯一