MongoDB

MongoDB 是最流行的文档型数据库。它以 BSON 文档为存储单位,schema 灵活、水平扩展友好,适合半结构化数据、内容管理、日志与快速迭代的业务。

内容导航

章节内容
文档模型与 mongosh安装、BSON、集合与文档、Go 客户端
CRUD 与聚合管道查询操作符、更新、聚合管道实战
索引设计与调优索引类型、explain()、执行计划分析
复制集、分片与事务副本集、读写关注、分片与多文档事务

文档模型

MongoDB 把相关数据以嵌套文档数组的方式放在一起,减少连接:

{
  _id: ObjectId("66f0..."),
  name: "Alice",
  email: "alice@example.com",
  address: { city: "北京", street: "中关村大街 1 号" },
  orders: [
    { sku: "A001", amount: 99.5, status: "paid" },
    { sku: "B002", amount: 20.0, status: "shipped" }
  ],
  createdAt: ISODate("2026-01-01T00:00:00Z")
}

建模的核心问题是「嵌入还是引用」

策略适用说明
嵌入(Embedding)1:1、1:少、总是一起读取一次查询取回全部数据
引用(Referencing)1:多、多:多、独立演化_id 关联,需 $lookup 或应用层连接
Tip

建模口诀:「什么总是一起访问,就存一起」。同时注意 16MB 的文档上限——无界增长的数组(如日志、消息)应改为独立集合,否则文档会持续膨胀直至写入失败。

与关系型的取舍

维度关系型MongoDB
Schema严格、需迁移灵活、应用层约定
事务跨表强一致单文档天然原子;多文档事务支持但性能有代价
扩展垂直 + 分库分表原生分片水平扩展
连接JOIN$lookup(较弱)或应用层组装
适用强一致、复杂关联半结构化、高吞吐、灵活演进
Warning

「schema-less」是营销话术。灵活 schema 意味着应用层必须承担校验责任,建议使用 JSON Schema 校验器($jsonSchema)或应用侧模型约束,否则字段会失控。