跳到主要内容

MongoDB 教程

欢迎学习 MongoDB!本教程将带你从零基础开始,逐步掌握 MongoDB NoSQL 数据库的核心知识和技能。

什么是 MongoDB?​

MongoDB 是一个基于文档(Document)的 NoSQL 数据库,使用 JSON 格式的 BSON(Binary JSON)来存储数据。它专为现代应用设计,提供高性能、高可扩展性和灵活的数据模型。

核心特点​

MongoDB 与关系型数据库对比​

关系型数据库 (MySQL)MongoDB说明
DatabaseDatabase数据库
TableCollection表 / 集合
RowDocument行 / 文档
ColumnField列 / 字段
Primary Key_id主键
JOIN$lookup / 嵌套表连接
SchemaFlexible Schema灵活模式

MongoDB 的优势​

1. 文档模型优势​

传统关系型数据库需要将数据分散到多个表中,通过 JOIN 操作关联。而 MongoDB 可以直接将相关数据嵌套在同一个文档中:

{
"username": "zhangsan",
"email": "[email protected]",
"profile": {
"age": 28,
"city": "Beijing",
"hobbies": ["reading", "coding", "gaming"]
},
"orders": [
{ "orderId": "O001", "total": 299.99 },
{ "orderId": "O002", "total": 159.00 }
]
}

优势说明:

  • 减少 JOIN 操作,提升查询性能
  • 数据模型更接近面向对象编程
  • 更易处理复杂的数据结构

2. 灵活的数据模式​

MongoDB 的模式(Schema)是灵活的,这意味着:

  • 同一个集合中的文档可以有不同的字段
  • 可以随时添加或删除字段
  • 无需长时间的模式迁移
// 文档 A
{ name: "Alice", age: 25 }

// 文档 B(不同的字段结构)
{ name: "Bob", email: "[email protected]", address: "Shanghai" }

3. 高可扩展性​

MongoDB 支持水平扩展,通过分片(Sharding)可以将数据分布到多台服务器上:

4. 高可用性​

MongoDB 的副本集(Replica Set)提供自动故障转移:

  • 主节点故障时自动选举新主节点
  • 数据自动复制到多个节点
  • 支持读写分离

MongoDB 的应用场景​

1. 内容管理系统 (CMS)​

网站内容通常包含各种类型的字段,如文章、评论、用户信息等。MongoDB 的灵活模式非常适合这类应用。

2. 实时分析​

MongoDB 可以快速写入大量日志和监控数据,适合实时分析和仪表盘应用。

3. 移动应用​

MongoDB 支持地理位置查询,非常适合基于位置的服务(LBS)应用。

4. 物联网 (IoT)​

物联网设备产生大量半结构化数据,MongoDB 可以高效存储和查询这些数据。

5. 电子商务​

产品目录、用户画像、订单处理等场景都能发挥 MongoDB 的优势。

6. 社交网络​

用户关系、动态信息、评论等数据结构灵活,适合文档数据库。

MongoDB 生态系统​

Atlas​

MongoDB Atlas 是云托管的数据库服务,提供:

  • 免费集群额度
  • 自动备份和恢复
  • 全球分布支持
  • 实时性能监控

工具和客户端​

  • MongoDB Shell (mongosh):命令行交互工具
  • MongoDB Compass:图形化界面工具
  • Drivers:各种编程语言的驱动程序(Python, Java, Node.js, Go 等)

MongoDB 版本演进​

MongoDB 自 2009 年发布以来持续演进,以下是主要版本的里程碑特性:

版本发布时间重要特性
4.02018多文档事务
4.22019分布式事务、通配符索引
4.42020隐藏索引、复合哈希索引
5.02021时序集合、窗口函数
6.02022聚合优化、变更流增强
7.02023聚合表达式、可查询加密范围查询
8.02024性能大幅提升、配置分片、批量写入命令

MongoDB 7.0 主要新特性​

MongoDB 7.0 带来了多项重要改进:

可查询加密增强:

  • 支持加密字段的范围查询($lt、$lte、$gt、$gte)
  • 增强数据安全性的同时保持查询能力

聚合管道增强:

  • 新增 $queryStats 阶段,返回查询统计信息
  • 改进的变更流跟踪和报告指标

并发 DDL 操作:

  • 同一数据库中针对不同集合的 DDL 操作可并发执行
  • 新增 DDLDatabase 和 DDLCollection 锁类型

索引构建改进:

  • 更快的错误报告
  • 新增 indexBuildMinAvailableDiskSpaceMB 参数控制最小磁盘空间

MongoDB 8.0 主要新特性​

MongoDB 8.0 是一个重要的大版本更新,带来了显著的性能改进和新功能:

性能大幅提升:

  • 升级的 TCMalloc 使用每 CPU 缓存替代每线程缓存,减少内存碎片
  • 第二副本节点并行写入和应用 oplog,提高复制吞吐量
  • 时间序列查询支持块处理(Block Processing),大幅提升查询速度

配置分片(Config Shard):

  • 配置服务器可同时存储应用数据和集群元数据
  • 简化小型部署架构,降低运维复杂度
  • 使用 transitionFromDedicatedConfigServer 和 transitionToDedicatedConfigServer 命令转换

集合移动和取消分片:

// 移动未分片集合到其他分片
db.adminCommand({
moveCollection: "mydb.users",
toShard: "shard02"
})

// 取消集合分片
db.adminCommand({
unshardCollection: "mydb.orders",
toShard: "shard01" // 可选,默认选择数据最少的分片
})

新的批量写入命令:

// bulkWrite 支持跨多个集合的操作
db.adminCommand({
bulkWrite: 1,
ops: [
{ insert: 0, document: { _id: 1, name: "Alice" } },
{ update: 1, filter: { _id: 2 }, update: { $set: { status: "active" } } }
],
nsInfo: [
{ ns: "mydb.users" },
{ ns: "mydb.products" }
]
})

查询设置(Query Settings):

// 设置查询优化提示
db.adminCommand({
setQuerySettings: {
queryShapeHash: "abc123",
settings: {
indexHints: { allowedIndexes: [ "name_1" ] },
comment: "使用名称索引优化"
}
}
})

BinData 转换:

// 字符串与 BinData 互转
{ $toUUID: "123e4567-e89b-12d3-a456-426614174000" }
{ $convert: { input: "$binData", to: "string" } }

Majority 写关注改进:

  • 写操作在大多数节点写入 oplog 后即返回确认
  • 显著提升 { w: "majority" } 写操作性能

Update 操作支持排序:

// 更新前先排序
db.users.updateOne(
{ status: "active" },
{ $set: { lastUpdated: new Date() } },
{ sort: { score: -1 } } // 更新分数最高的活跃用户
)

版本选择建议​

场景推荐版本理由
新项目MongoDB 8.0最新特性、最佳性能
需要可查询加密范围查询MongoDB 7.0+支持加密字段范围查询
时序数据处理MongoDB 8.0+块处理显著提升性能
生产环境(稳定优先)MongoDB 7.0成熟稳定
学习开发MongoDB 8.0最新特性、完整功能

教程目录​

基础阶段​

进阶阶段​

高级特性​

知识速查​

学习建议​

  1. 动手实践:每学一个概念,都要使用 mongosh 实际操作
  2. 理解原理:不仅要记住命令,还要理解底层工作原理
  3. 循序渐进:从基础 CRUD 操作开始,逐步掌握高级特性
  4. 阅读官方文档:MongoDB 官方文档是最权威的参考资料

参考资源​

准备好开始学习了吗?点击下一章开始你的 MongoDB 之旅!