MongoDB 总览
MongoDB 是一款成熟、高度灵活的通用分布式文档型 NoSQL 数据库系统。它采用类似 JSON 的 BSON(二进制 JSON) 格式存储数据,原生支持动态 Schema、多层嵌套文档、多键索引与强大的聚合分析管道(Aggregation Pipeline)。
架构形态与关键属性
| 属性维度 | 规格与技术实现 |
|---|---|
| 数据模型 | 层次化文档模型(Database -> Collection -> Document),支持原生内嵌子文档与数组。 |
| 查询接口 | MongoDB Query Language (MQL)、强大的 Aggregation Pipeline、以及驱动层原生 Builders。 |
| 开源许可证 | SSPL(Server Side Public License,自托管需注意服务提供商商业限制)。 |
| 部署形态 | 单实例、副本集(Replica Set,自动选主容灾)、分片集群(Sharded Cluster,水平自动路由扩容)。 |
| 事务与一致性 | 单文档操作天然原子;支持多文档 ACID 分布式事务;通过 Read/Write Concern 灵活调整一致性级别。 |
模型与查询范式
MongoDB 的文档模型允许在单个文档中内嵌相关联的多项数据,从而消除关系型数据库中的高代价 JOIN 操作:
javascript
// 插入带有嵌套地址与订单项数组的复杂文档
db.orders.insertOne({
order_no: "ORD-2026-9901",
customer: {
user_id: 1001,
name: "Alice",
tier: "VIP"
},
items: [
{ sku: "SKU-A1", qty: 2, price: 99.5 },
{ sku: "SKU-B2", qty: 1, price: 199.0 }
],
status: "PAID",
created_at: new Date()
});
// 使用 Aggregation Pipeline 进行按用户维度的汇总统计
db.orders.aggregate([
{ $match: { status: "PAID" } },
{ $unwind: "$items" },
{ $group: {
_id: "$customer.user_id",
customer_name: { $first: "$customer.name" },
total_spent: { $sum: { $multiply: ["$items.qty", "$items.price"] } },
item_count: { $sum: "$items.qty" }
}},
{ $sort: { total_spent: -1 } }
]);事务、索引与高可用扩展
- WiredTiger 存储引擎:基于 B-Tree 与 LSM 混合架构,提供行级并发控制、Snappy/Zstd 压缩以及可控的内存缓存(WiredTiger Cache)。
- 多维度索引:
- 复合索引(Compound Index):遵循 ESR 原则(Equality -> Sort -> Range)。
- 多键索引(Multikey Index):自动为数组内的每个元素创建索引项。
- 通配符索引(Wildcard Index) 与 TTL 索引(自动过期清理历史文档)。
- 高可用与水平扩展:
- 副本集(Replica Set):基于 Raft 变种协议实现主从自动选举(Primary-Secondary-Arbiter),Oplog 保证增量复制。
- 分片集群(Sharding):通过
mongos路由、Config Server 元数据以及分片键(Shard Key)实现 TB/PB 级数据的无缝水平拆分。
适用边界与架构选型建议
- ✅ 最适合场景:
- 内容管理、商品详情、动态表单等数据结构多变且迭代频繁的业务。
- 物联网(IoT)设备上报与事件日志记录。
- 读写吞吐极高、需要快速通过副本集与分片实现水平扩展的场景。
- ⚠️ 约束与运维风险:
- 文档最大限制 16MB:严禁设计无界数组(Unbounded Array),避免文档不断膨胀触发重写碎片。
- 缺乏强制的外键约束,跨 Collection 的完整性需在应用层保障。
版本阅读范围
完整版本目录收录本仓库已有专题(如 mongodb-4.0、mongodb-4.2、mongodb-4.4)。这些是教学与兼容性对照入口;运行环境的具体版本以安装页、工作台或采集证据为准。
推荐学习路线
安装与环境 → 核心概念 → 命令行工具 → 示例数据 → 完整版本目录。用官方样例完成查询、聚合与增删改查练习,再阅读版本差异。
实验入口与范围
本产品没有对应的浏览器执行引擎;浏览器实验台目录列出本站实际可运行的数据库。 Docker 验证证据列出本产品已采集结果与缺口;阅读证据不等同于启动服务或证明所有功能已验证。