Prompts-MCP 686 skills · ai / design / design-pattern / framework / fundamentals / habit / lang / tech-selection /mcp/sse
tech-selection tech-selection/database/when-mongodb.md medium

tech-selection-when-mongodb

文档库 MongoDB 何时合适、何时误用 — 天然聚合/嵌套/Schema多变才合适,多实体强事务+复杂 join 应回到关系库。Use when 考虑用 MongoDB / 评审文档模型选型 / 排查 MongoDB 误用时。

文档数据库文档模型mongodb嵌套文档多文档事务schema 多变
paths
  • *.java
  • *.yml
  • *.xml
  • *.json

文档库 · MongoDB 何时用

本条只管「该不该用文档模型」。关系库内部 MySQL/PG 之选见 mysql-vs-postgresql.md;三类总决策见 decision-tree.md

合适 vs 误用

真合适 误用(应回关系库)
数据天然聚合/嵌套:商品详情、用户档案、CMS、IoT 事件 当成 SQL 表建模 + 频繁 $lookup join
Schema 多变、字段不固定 强多表/多文档事务
按文档自然分片 单文档逼近 16MB 上限

关键约束

  • 多文档事务有硬约束:建议 ≤1000 文档 / 60s 内完成,跨分片事务成本高。
  • 单文档上限约 16MB:无限往一个文档塞嵌套数组会撞墙。

核心判据:多实体强事务 + 复杂 join → 回到 PostgreSQL / MySQL;文档库的甜区是「一个聚合根读写一整篇文档」。

反例

  • ❌ 把订单/用户/商品拆成多个集合,再用 $lookup 模拟外键 join —— 这是关系建模,选错了库。
  • ❌ 依赖跨多个文档的强一致事务 —— MongoDB 多文档事务约束多,应选关系库。

自检

  • [ ] 数据是「天然聚合的一整篇」还是「需要拆表 join」?后者别用文档库。
  • [ ] 不存在「多实体强一致事务」的核心诉求?
  • [ ] 单文档不会逼近 16MB、不依赖海量跨文档事务?

相关