MongoDB 设计与使用助手
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3651d062/mongodb-design。
技能介绍
要解决的设计问题
MongoDB 不是把关系表直接搬进文档存储。真实项目里更容易卡在几个具体点上:订单、用户、地址该嵌入还是引用?复合索引字段顺序为什么重要?聚合管道里 $match、$unwind、$lookup 如何影响索引使用?分片键选错后为什么很难回退?如果这些决策只靠经验,上线后常见后果包括查询变慢、文档接近 16MB、数组无限增长、嵌套过深,或者某个片键成为写入热点。
技能如何工作
这个技能围绕 MongoDB 设计流程 提供帮助,而不是泛泛生成查询。它会先识别用户意图:设计文档模型、做 嵌入 vs 引用 决策、设计索引、规划聚合管道,或讨论分片方案。核心能力包括:
- 嵌入/引用判断:根据数据是否总是一起查询、是否会无限增长、是一对少还是一对多、是否需要单文档原子操作,给出明确选择依据。
- 索引规则:强调
Equality → Sort → Range的复合索引顺序,并提醒$match在前可利用索引、$unwind后能力受限,覆盖查询应只投影索引字段。 - Schema 模式:覆盖 Attribute、Bucket、Document Versioning、Extended Reference、Polymorphic、Subset、Tree 等 11 种常见模式,帮助把业务结构映射到文档模型。
- 版本检查:按用户目标版本加载 MongoDB 版本特性,提示废弃项、重大变更和新模块,避免设计出依赖不兼容能力的方案。
适用边界与注意点
它适合设计评审、代码落地前的模型讨论,以及从关系型数据库迁移到 MongoDB 时的文档建模参考。注意它不替代压测和真实索引验证;生产环境仍要结合 explain、数据分布、写入模式、TTL、文本索引和运维策略判断。硬约束也很明确:单文档不超过 16MB,数组建议少于 1000 个元素,能用嵌入解决就尽量避免 $lookup;片键一旦选定很难修改,且应避开单调递增键造成热点。
使用场景
- 设计订单、用户、地址等文档模型时,判断字段应嵌入还是用 ID 引用。
- 为商品查询写复合索引时,按 Equality、Sort、Range 确定字段顺序。
- 规划订单聚合管道时,检查 $match、$unwind、$lookup 对索引使用的影响。
- 选择分片键时,评估写入热点、片键不可修改和事务开销等约束。
适合人员
- 负责电商订单服务的后端工程师,需要把订单、用户、地址设计成低 JOIN 的文档模型。
- 从 MySQL 迁移到 MongoDB 的架构师,需要评估嵌入/引用、索引和分片键方案。
- 做 IoT 时序数据的平台工程师,需要选择 Bucket、Polymorphic 等 Schema 模式。
- 维护 MongoDB 8.0 或 7.0 项目的开发负责人,需要检查版本废弃项和新增特性。