TTokenySpace
返回 Skills 列表

Mongo Manager Free

提供MongoDB Schema设计、索引策略、聚合管道、一致性配置及性能调优的免费实战指南,助力开发者优化数据库应用。

#中文
0

安装到 Tokeny(自动)

下载 ZIP
安装"mongo-manager-free"技能
技能信息:
- 名称: Mongo Manager Free
- 标识: mongo-manager-free
- 描述: 提供MongoDB Schema设计、索引策略、聚合管道、一致性配置及性能调优的免费实战指南,助力开发者优化数据库应用。
- 版本: 1.0.0
下载地址:
https://www.tokeny.space/api/skills/mongo-manager-free/download
继续

复制上方内容到 Tokeny 客户端并在会话中发送即可自动安装;也可直接 下载 ZIP并拖动到技能窗口安装。

SKILL.md

Mongo管理工具(免费版)

本工具为MongoDB开发者提供Schema设计、查询编写与性能优化的实战指南。免费版覆盖核心场景:Schema建模、索引策略、聚合管道、一致性配置,足以应对绝大多数业务开发需求。

概述

MongoDB作为文档型NoSQL数据库的代表,凭借灵活的Schema、水平扩展能力与丰富的查询语法,已成为现代应用开发的主流选择之一。然而其"schemaless"特性常被误解为"无需设计Schema",实际上MongoDB的Schema设计直接影响查询性能、写入吞吐与存储成本。

本工具以原创中文实战指南形式,系统化覆盖MongoDB开发中的高频问题,帮助开发者从"能用"升级为"用好"。

核心能力

能力分类说明
Schema设计嵌入vs引用决策、文档大小控制、数组管理
索引策略ESR规则、复合索引、TTL索引、文本索引
聚合管道分阶段构建、$match前置、$lookup优化
一致性配置读写关注、读偏好、因果一致性
性能诊断explain执行计划、COLLSCAN检测、覆盖查询
常见陷阱文档大小、数组增长、$lookup性能
技术实现要点:核心能力基于input_params参数与output_format配置实现,支持创建/查询/修改/删除等操作模式,通过config_options进行运行时配置。

核心功能执行

input_params参数进行配置。

输入: 用户提供核心功能执行所需的指令和必要参数。 处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志。

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

参数配置与调用

config_options参数进行配置。

输入: 用户提供参数配置与调用所需的指令和必要参数。 处理: 解析参数配置与调用的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回参数配置与调用的响应数据,包含状态码、结果和日志。

  • 执行此能力时使用config_options参数,支持修改/重置/导入操作

结果处理与输出

output_format参数进行配置。

输入: 用户提供结果处理与输出所需的指令和必要参数。 处理: 解析结果处理与输出的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回结果处理与输出的响应数据,包含状态码、结果和日志。

  • 执行此能力时使用output_format参数,支持导出/保存/转换操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:Agent、MongoDB、设计与优化指南、一致性配置等核心、开发者的数据库设、计与优化实战指南、通过原创中文文档、建模哲学、一致性模式、性能调优等核心主、配套常见陷阱清单、与故障排查表、帮助开发者避开、使用中的高频坑点、Use、when、需要数据库操作、SQL、数据存储管理时使、不适用于数据库架、构设计决策等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。

使用场景

场景一:新项目Schema设计

从需求出发设计文档结构,决定哪些数据嵌入、哪些数据引用,避免后期重构。

场景二:慢查询排查

通过explain分析执行计划,识别全表扫描、索引缺失、选择性差等问题。

场景三:聚合管道优化

对复杂统计查询进行分阶段调优,前置$match减少数据量,合理使用索引。

场景四:一致性配置

根据业务场景选择合适的读写关注级别,平衡性能与一致性。

快速开始

第一步:理解Schema设计哲学

MongoDB Schema设计核心原则:

  • 一起查询的数据嵌入:避免频繁$lookup
  • 独立访问或大体量数据引用:避免文档膨胀
  • 为查询设计而非为规范化设计:读取性能优先
  • 没有JOIN:冗余数据是常态,更新复杂度可接受

第二步:掌握索引ESR规则

ESR规则决定复合索引字段顺序:

  • E(Equality):等值查询字段放最前
  • S(Sort):排序字段放中间
  • R(Range):范围查询字段放最后
// 查询:{status: "active", age: {$gte: 18}}.sort({createdAt: -1})
// 索引:{status: 1, createdAt: -1, age: 1}  // E-S-R顺序
db.users.createIndex({status: 1, createdAt: -1, age: 1})

第三步:执行计划分析

// 查看执行计划
db.users.find({status: "active"}).explain("executionStats")
// ...
// 关键指标:
// - winningStage.stage: IXSCAN(好)vs COLLSCAN(差)
// - totalDocsExamined: 扫描文档数
// - nReturned: 返回文档数
// 理想:totalDocsExamined ≈ nReturned

完整上手时间约120秒。

示例

Schema设计:嵌入vs引用

// 嵌入模式:适合一起查询的小数据
{
    _id: ObjectId("..."),
    name: "张三",
    addresses: [
        {type: "home", city: "北京", detail: "朝阳区..."},
        {type: "work", city: "北京", detail: "海淀区..."}
    ]
}
// ...
// 引用模式:适合独立访问或大体量数据
// users集合
{
    _id: ObjectId("..."),
    name: "张三"
}
// addresses集合
{
    _id: ObjectId("..."),
    userId: ObjectId("..."),  // 引用用户
    type: "home",
    city: "北京",
    detail: "朝阳区..."
}

索引策略

// 单字段索引
db.users.createIndex({email: 1}, {unique: true})
// ...
// 复合索引(遵循ESR规则)
db.orders.createIndex({userId: 1, status: 1, createdAt: -1})
// ...
// TTL索引(自动过期)
db.sessions.createIndex({createdAt: 1}, {expireAfterSeconds: 86400})
// ...
// 文本索引
db.articles.createIndex({title: "text", content: "text"})

聚合管道示例

// 统计每个用户的订单数与总金额
db.orders.aggregate([
    // 1. $match前置,利用索引减少数据量
    {$match: {status: "completed", createdAt: {$gte: ISODate("2026-01-01")}}},
// ...
    // 2. $group聚合
    {$group: {
        _id: "$userId",
        orderCount: {$sum: 1},
        totalAmount: {$sum: "$amount"}
    }},
// ...
    // 3. $sort排序
    {$sort: {totalAmount: -1}},
// ...
    // 4. $limit限制
    {$limit: 100}
])

一致性配置

// 强一致性(牺牲性能)
db.collection.insertOne(doc, {writeConcern: {w: "majority"}})
db.collection.find({}).readConcern("majority").readPref("primary")
// ...
// 最终一致性(高性能,可读从节点)
db.collection.find({}).readPref("secondaryPreferred")
// ...
// 因果一致性(读己之写)
const session = db.getMongo().startSession({causalConsistency: true})
db.collection.find({}, {}, {session})

最佳实践

1. 控制文档大小

MongoDB单文档上限16MB,从设计阶段就要规划:

  • 大文件用GridFS存储
  • 无限增长的数组改为引用模式
  • 字段名简短,BSON会重复存储字段名

2. 数组管理

// 错误:无限$push导致文档膨胀
db.posts.updateOne({_id: postId}, {$push: {comments: newComment}})
// ...
// 正确:限制数组长度
db.posts.updateOne({_id: postId}, {
    $push: {comments: {$each: [newComment], $slice: -100}}
})

3. 聚合管道优化原则

  • $match前置可利用索引
  • $project及早减少字段
  • $match$unwind后无法用索引
  • 复杂管道分阶段测试

4. 索引选择性

为基数高(区分度大)的字段建索引。性别字段只有2个值,索引选择性差,不如全表扫描。

5. retryWrites处理瞬时故障

// 连接字符串启用retryWrites
mongodb://host:27017/db?retryWrites=true

常见问题

Q1:MongoDB是"schemaless"吗?

A:不是。MongoDB不强制Schema,但仍然需要Schema设计,只是Schema在应用层而非数据库层强制。糟糕的Schema设计会导致查询性能差、数据冗余、更新困难。

Q2:什么时候用嵌入,什么时候用引用?

A:(1) 一起查询且数据量小→嵌入;(2) 独立访问或数据量大→引用;(3) 多对多关系→引用;(4) 数据会无限增长→引用。

Q3:$lookup性能差怎么办?

A:(1) MongoDB 5.0+支持$lookup带pipeline,可先过滤再关联;(2) 频繁$lookup说明应考虑嵌入;(3) 对外键字段建索引;(4) 限制关联数据量。

Q4:数组超过1000个元素有什么影响?

A:(1) 文档膨胀接近16MB上限;(2) 多键索引体积爆炸;(3) 文档内分页困难。建议改用引用模式或桶模式(bucketing)。

Q5:explain输出如何看?

A:重点关注:winningStage.stage(IXSCAN好,COLLSCAN差)、totalDocsExamined(扫描数)、nReturned(返回数)。理想状态是totalDocsExamined ≈ nReturned,覆盖查询时totalDocsExamined = 0

Q6:从节点读取数据有延迟怎么办?

A:复制延迟通常在毫秒到秒级。需要"读己之写"的场景使用readPref("primary")或因果一致性会话。nearest读偏好延迟最低但可能读到旧数据。

已知限制

本免费体验版限制以下高级功能:

  • 不支持分片集群配置指南
  • 不支持副本集故障切换演练
  • 不支持Atlas Search全文搜索
  • 不支持Change Stream实时同步
  • 不支持性能基准测试套件

解锁全部功能请使用专业版:mongo-manager-pro

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux
  • MongoDB: 4.0+(推荐5.0+以使用$lookup pipeline等特性)

依赖详情

依赖项类型是否必需获取方式
MongoDB数据库必需mongodb.com 官方下载
mongosh客户端必需随MongoDB附带
PyMongoPython驱动可选pip install pymongo

API Key 配置

  • 本免费版基于本地MongoDB实例,无需云端API Key
  • 数据库连接字符串通过环境变量MONGODB_URI配置
  • 禁止在脚本中硬编码数据库密码

可用性分类

  • 分类: MD+EXEC(纯Markdown指令,部分功能需要exec命令行执行能力)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent完成操作

错误处理

错误场景原因处理方式
配置错误参数缺失或格式错误检查依赖说明中的配置要求
运行时错误运行环境不满足确认运行环境符合依赖说明
网络错误连接超时或不可达执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案

输出格式

{
  "success": true,
  "data": {
    "result": "Mongo管理工具免费版处理结果",
    "execution_time": "0.5s",
    "metadata": {
      "version": "1.0",
      "processor": "mongo manager"
    }
  },
  "execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
  "error": null
}

评论

加载中…