关于 mongodb-usage
面向开发者的 MongoDB 最佳实践技能,涵盖模式、索引、聚合和连接决策。内容侧重实用设计建议,并明确说明相关 MCP 操作为只读。
主要功能
- 01嵌入与引用的选择建议
- 02常见文档模式
- 03索引类型与 ESR 排序
- 04聚合管道性能建议
- 05连接与连接池建议
- 06只读 MCP 操作
适用场景
- 01选择嵌入还是引用数据
- 02规划查询和排序所需的索引
- 03提高聚合管道效率
MCP 相关
输入说明该 MCP 操作为只读,不支持写入、更新或删除。它提供 MongoDB 最佳实践指导。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fcakyon/ claude-codex-settings --skill mongodb-usage安装后在 Claude Code 中输入/mongodb-usage确认已加载。
详细介绍
MongoDB 最佳实践
MCP 限制
此 MCP 以只读模式运行。 无法执行写入、更新或删除操作。
Schema 设计模式
嵌入与引用
适合嵌入的情况:
- 经常一起访问数据
- 子文档数量有界(不会无限增长)
- 一对少关系
- 数据不经常变化
适合引用的情况:
- 独立访问数据
- 多对多关系
- 文档会超过 16MB 的限制
- 被引用的数据需要频繁更新
常见模式
子集模式: 将经常访问的子集存储在父文档中,将完整数据存储在单独的集合中。
桶模式: 将时序数据分组存储在桶中(例如,将每小时的读数存储在一个文档中)。
计算模式: 存储预先计算的值,以避免执行开销较大的计算。
索引策略
索引指南
- 为查询、排序和聚合的 $match 阶段中使用的字段创建索引
- 复合索引支持基于前缀字段的查询
- 覆盖查询(所有字段都在索引中)速度最快
- 索引过多会降低写入速度
索引类型
- 单字段: 在一个字段上创建的基本索引
- 复合: 包含多个字段,字段顺序会影响查询
- 多键: 为数组字段自动创建
- 文本: 对字符串内容进行全文搜索
- TTL: 在一段时间后自动过期文档
ESR 规则
对于复合索引,按以下顺序排列字段:
- Equality(精确匹配字段)
- Sort(排序字段)
- Range(范围查询字段,例如 $gt、$lt)
聚合管道
性能提示
- 尽早使用
$match和$project,以减少文档数量 - 尽可能尽早使用
$limit - 对大型集合使用
$lookup时,确保已创建索引 - 使用
$facet在一次查询中执行多个聚合
常见阶段
// Filter documents
{ $match: { status: "active" } }
// Reshape documents
{ $project: { name: 1, total: { $sum: "$items.price" } } }
// Group and aggregate
{ $group: { _id: "$category", count: { $sum: 1 } } }
// Sort results
{ $sort: { count: -1 } }
// Join collections
{ $lookup: { from: "orders", localField: "_id", foreignField: "userId", as: "orders" } }
连接最佳实践
连接字符串格式
- Atlas:
mongodb+srv://user:[email protected]/database - 本地:
mongodb://localhost:27017/database - 副本集:
mongodb://host1,host2,host3/database?replicaSet=rs0
连接池
- 在应用程序中使用连接池(驱动程序默认启用)
- 根据工作负载设置合适的连接池大小
- 不要为每个请求都创建新连接
应避免的反模式
- 无界数组: 无限增长的数组
- 超大文档: 接近 16MB 的文档
- 集合过多: 改用嵌入
- 缺少索引: 查询导致集合扫描
- $where 运算符: 为了安全起见,改用聚合
- 在文档中存储文件: 对于大型文件,请使用 GridFS
评论
支持 Markdown