第一章:MongoDB 简介与核心概念

最后更新: 2024-01-01 作者: MongoDB Team
页面目录

第一章:MongoDB 简介与核心概念

了解 MongoDB 的起源、设计理念和核心优势

1.1 什么是 MongoDB

MongoDB 是一个基于 文档(Document) 的 NoSQL 数据库,使用 BSON(Binary JSON) 格式存储数据。它由 MongoDB 公司开发,于 2009 年首次发布,以其高性能、高可用性和易扩展性著称。

核心特性

特性 说明
文档存储 数据以灵活的 BSON 文档形式存储
高性能 内置索引支持,查询性能优异
高可用 副本集提供自动故障转移和数据冗余
水平扩展 分片集群支持海量数据分布式存储
动态模式 同一集合的文档可以有不同的字段结构
丰富查询 支持丰富的查询表达式和聚合操作

1.2 MongoDB vs 关系型数据库

┌─────────────────────────────────────────────────────────────┐
│                    MongoDB 与 RDBMS 对比                     │
├─────────────────┬──────────────────┬────────────────────────┤
│     概念        │      MongoDB      │       MySQL/PostgreSQL │
├─────────────────┼──────────────────┼────────────────────────┤
│ 数据库          │ Database         │ Database               │
│ 表/集合         │ Collection       │ Table                  │
│ 行/文档         │ Document         │ Row                    │
│ 列/字段         │ Field            │ Column                 │
│ 主键            │ _id (自动生成)    │ Primary Key            │
│ 索引            │ Index            │ Index                  │
│ 关联            │ Embedded/Link    │ JOIN                   │
│ 事务            │ ACID (单分片)     │ ACID (全局)            │
└─────────────────┴──────────────────┴────────────────────────┘

1.3 BSON 数据类型

MongoDB 使用 BSON 作为存储格式,BSON 是 JSON 的二进制表示,支持更多数据类型:

常用数据类型

类型 说明 示例
String UTF-8 字符串 "Hello MongoDB"
Integer 32/64 位整数 42, 9223372036854775807
Double 64 位浮点数 3.14159
Boolean 布尔值 true, false
Object 内嵌文档 { name: "Alice" }
Array 数组 [1, 2, 3]
Null 空值 null
Date 日期时间 ISODate("2024-01-01")
ObjectId 文档 ID ObjectId("...")
Binary Data 二进制数据 二进制 blob
Timestamp 时间戳 内部使用
Regular Expression 正则表达式 /pattern/i

示例文档

{
  "_id": ObjectId("507f1f77bcf86cd799439011"),
  "username": "john_doe",
  "email": "john@example.com",
  "age": 28,
  "is_active": true,
  "profile": {
    "first_name": "John",
    "last_name": "Doe",
    "bio": "Software Engineer",
    "avatar": "https://example.com/avatar.jpg"
  },
  "skills": ["JavaScript", "Python", "MongoDB"],
  "created_at": ISODate("2024-01-01T00:00:00Z"),
  "updated_at": ISODate("2024-01-15T12:30:00Z"),
  "settings": {
    "theme": "dark",
    "notifications": true,
    "language": "zh-CN"
  }
}

1.4 MongoDB 架构概览

┌─────────────────────────────────────────────────────────────┐
│                       MongoDB 架构                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐               │
│  │  Router    │  │  Router    │  │  Router    │  mongos      │
│  │  (mongos)  │  │  (mongos)  │  │  (mongos)  │              │
│  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘               │
│        │              │              │                      │
│        └──────────────┼──────────────┘                      │
│                       │                                     │
│  ┌────────────────────┴────────────────────┐               │
│  │              Config Server               │              │
│  │         (配置分片和集群元数据)             │              │
│  └────────────────────┬────────────────────┘               │
│                       │                                     │
│     ┌─────────────────┼─────────────────┐                  │
│     │                 │                 │                  │
│  ┌──┴───┐          ┌──┴───┐          ┌──┴───┐              │
│  │Shard1│          │Shard2│          │Shard3│              │
│  │ RS   │          │ RS   │          │ RS   │   分片副本集  │
│  └──┬───┘          └──┬───┘          └──┬───┘              │
│     │                 │                 │                  │
│  ┌──┴───┐          ┌──┴───┐          ┌──┴───┐              │
│  │Sec. 1│          │Sec. 1│          │Sec. 1│              │
│  │Sec. 2│          │Sec. 2│          │Sec. 2│              │
│  │Arb.  │          │Arb.  │          │Arb.  │              │
│  └──────┘          └──────┘          └──────┘              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.5 MongoDB 应用场景

适用场景

场景 说明 示例
内容管理系统 灵活的数据结构 文章、评论、用户生成内容
实时分析 高并发读写 日志分析、实时监控
物联网 (IoT) 海量时序数据 传感器数据、设备日志
移动应用 快速迭代 用户数据、离线同步
电子商务 商品目录、订单 产品属性灵活多变
社交网络 用户关系、动态 朋友圈、评论系统

不适用场景

场景 原因
强事务场景 需要跨文档 ACID 事务(MongoDB 4.0+ 已支持单分片事务)
高度结构化数据 需要复杂 JOIN 操作的数据
低延迟简单查询 简单 KV 场景 Redis 更合适

1.6 MongoDB 版本历史

版本 发布年份 主要特性
1.0 2009 初始版本
2.0 2011 副本集、TTL 索引
2.6 2014 文本搜索、聚合增强
3.0 2015 WiredTiger 存储引擎
3.4 2016 分布式事务、视图
4.0 2018 多文档事务、Retryable Writes
4.2 2019 分布式事务、聚合增强
4.4 2020 变更流增强、hashed 分片
5.0 2021 时间序列集合、实时重新分片
6.0 2022 集合级加密、聚合增强
7.0 2024 查询able 加密、改进的分片

1.7 常用工具

工具 说明
mongosh MongoDB Shell,命令行客户端
mongod MongoDB 数据库服务进程
mongos 分片集群路由进程
mongodump 数据库备份工具
mongorestore 数据库恢复工具
mongoexport 导出为 JSON/CSV
mongoimport 从 JSON/CSV 导入
MongoDB Compass 图形化管理工具
MongoDB Atlas 云数据库服务

💡 实践提示

  1. 理解文档模型:MongoDB 的核心是文档,理解如何设计文档结构是关键
  2. 避免过度嵌套:虽然可以嵌套文档,但深层嵌套会影响查询性能
  3. 合理使用引用:对于需要频繁关联的数据,使用 DBRef 或手动引用
  4. 关注版本兼容性:开发时注意 MongoDB 版本,避免使用不支持的特性

📚 继续学习