跳到主要内容

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 操作可并发执行
  • 新增 DDLDatabaseDDLCollection 锁类型

索引构建改进

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

MongoDB 8.0 主要新特性

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

性能大幅提升

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

配置分片(Config Shard)

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

集合移动和取消分片

// 移动未分片集合到其他分片
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 之旅!