mcpField
M
mongodb-usage

mongodb-usage

github.com/fcakyon数据与数据库1.2k47 次安装今天更新
代码仓库

关于 mongodb-usage

面向开发者的 MongoDB 最佳实践技能,涵盖模式、索引、聚合和连接决策。内容侧重实用设计建议,并明确说明相关 MCP 操作为只读。

主要功能

  1. 01嵌入与引用的选择建议
  2. 02常见文档模式
  3. 03索引类型与 ESR 排序
  4. 04聚合管道性能建议
  5. 05连接与连接池建议
  6. 06只读 MCP 操作

适用场景

  1. 01选择嵌入还是引用数据
  2. 02规划查询和排序所需的索引
  3. 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 规则

对于复合索引,按以下顺序排列字段:

  1. Equality(精确匹配字段)
  2. Sort(排序字段)
  3. 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