MongoDB到SQL迁移工具

No2SQL是一个帮助用户从MongoDB迁移到SQL数据库的工具,提供集合发现、关系推断、SQL脚本生成和ER图生成功能。

  • by Ptalati015
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 Ptalati015/No2SQL

使用说明

No2SQL

No2SQL是一个MCP服务器和NuGet包,通过以下方式帮助您从MongoDB迁移到SQL:

  • 发现集合和关系候选者,
  • 生成SQL模式脚本,
  • 生成SQL种子(INSERT)语句,
  • 生成Mermaid、PlantUML和GraphViz DOT格式的ER图。

这是给谁的

  • 从MongoDB迁移到关系数据库的团队
  • 工程师以ERD形式记录NoSQL结构
  • 人工智能辅助的工作流程,Copilot可以通过MCP调用数据迁移工具

快速开始

1.配置MongoDB连接

通过环境变量设置MongoDB连接字符串 NO2SQL_MONGO (推荐)。

示例格式:

mongodb+srv://<username>:<password>@<cluster-host>/<database>?retryWrites=true&w=majority

您也可以通过以下方式进行设置 No2SQL/appsettings.json 在...之下 ConnectionStrings:MongoDb.


安装No2SQL MCP服务器

No2SQL MCP服务器作为NuGet包内的独立可执行文件分发。
你不需要。NET已安装,您不需要。NET项目。

1.下载软件包

选项A——使用curl

curl -L https://www.nuget.org/api/v2/package/No2SQL/1.0.3 -o No2SQL.1.0.3.nupkg

选项B——使用PowerShell

Invoke-WebRequest https://www.nuget.org/api/v2/package/No2SQL/1.0.3 -OutFile No2SQL.1.0.3.nupkg

选项C——手动下载
访问https://www.nuget.org/packages/No2SQL然后单击 下载包.

2.取出包装

A. .nupkg 是ZIP存档:

unzip No2SQL.1.0.3.nupkg -d no2sql

可执行文件将位于以下位置:

/tools/win-x64/No2SQL.exe
/tools/linux-x64/No2SQL
/tools/osx-arm64/No2SQL

3.配置您的MCP客户端

⚠️ 重要提示: 始终包括 env 使用MongoDB连接字符串进行阻塞。如果没有它,服务器将启动但无法访问您的数据库,工具将自动失败。

VS代码(推荐)

添加到您的 用户设置JSON (Ctrl+Shift+P → 打开用户设置(JSON)):

"mcp.servers": {
  "no2sql": {
    "command": "path/to/no2sql/tools/win-x64/No2SQL.exe",
    "env": {
      "NO2SQL_MONGO": "your-mongodb-connection-string",
      "NO2SQL_BLOCK_SYSTEM_DATABASES": "true"
    }
  }
}

或者,VS Code将创建一个专用的 mcp.json 文件(at %APPDATA%\Code\User\mcp.json 在Windows上)。如果您使用该路线,请确保添加 env 这里也有块:

{
  "servers": {
    "no2sql": {
      "type": "stdio",
      "command": "path/to/no2sql/tools/win-x64/No2SQL.exe",
      "args": [],
      "env": {
        "NO2SQL_MONGO": "your-mongodb-connection-string",
        "NO2SQL_BLOCK_SYSTEM_DATABASES": "true"
      }
    }
  },
  "inputs": []
}

保存后,重新加载窗口: Ctrl+Shift+P → 开发者:重新加载窗口.

克劳德桌面版

添加 claude_desktop_config.json:

{
  "mcpServers": {
    "no2sql": {
      "command": "path/to/no2sql/tools/win-x64/No2SQL.exe",
      "env": {
        "NO2SQL_MONGO": "your-mongodb-connection-string",
        "NO2SQL_BLOCK_SYSTEM_DATABASES": "true"
      }
    }
  }
}

GitHub Copilot MCP

{
  "mcpServers": {
    "no2sql": {
      "command": "path/to/no2sql/tools/win-x64/No2SQL.exe",
      "env": {
        "NO2SQL_MONGO": "your-mongodb-connection-string",
        "NO2SQL_BLOCK_SYSTEM_DATABASES": "true"
      }
    }
  }
}

4.验证服务器是否已注册(VS代码)

重新加载后,打开命令面板(Ctrl+Shift+P)然后跑 MCP:列出服务器.
你应该看看 no2sql 上市的。如果没有出现,请仔细检查可执行文件路径,并确保您的设置已保存到正确的文件中。

5.在Copilot聊天中测试它

  1. 打开 副驾驶聊天 VS代码
  2. 点击 工具图标 聊天输入底部的(插头或锤子图标)
  3. 确认 no2sql 出现在工具列表中并已启用
  4. 键入提示--Copilot将自动通过No2SQL路由:
Use No2SQL to list my MongoDB databases.

如果工具图标显示 no2sql 提示返回您的数据库列表,您已完全设置好。

更多示例提示:

Infer relationships for database mydb.
Generate SQL schema for database mydb.
Generate Mermaid ERD for mydb using SQL source.
Generate SQL INSERT statements for collection orders in mydb.

MCP工具暴露

工具 说明
TestConnectivity 验证MCP服务器连接
ListDatabases 列出可用数据库(遵守允许共享的策略)
ListInferredRelationships 按集合列出类似ID的字段
CompareIdFieldsToIds 通过匹配类似ID的字段来推断关系 _id 价值观
GenerateSqlSchema 根据推断的关系生成SQL架构
GenerateSqlSchemaAdvanced 生成具有可选关系覆盖的SQL架构
GenerateSeedersForCollection 为一个集合生成SQL INSERT种子语句
GenerateErdMermaid 生成Mermaid ERD(来源:sql、mongo、auto)
GenerateErdPlantUml 生成PlantUML ERD(来源:sql、mongo、auto)
GenerateErdDot 生成GraphViz DOT ERD(来源:sql、mongo、auto)

安全护栏

No2SQL包括输入验证和数据库访问护栏。

环境变量:

  • NO2SQL_ALLOWED_DATABASES --可选逗号分隔数据库列表
  • NO2SQL_BLOCK_SYSTEM_DATABASES --默认为 true;块 admin, config, local

工具输入已验证:

  • 标识符格式和长度
  • 图表源值(sql, mongo, auto)
  • 关系覆盖字段
  • 快速注射式标记图案

推荐生产基准:

  • 集 NO2SQL_ALLOWED_DATABASES 对一个严格的反对者
  • 保持 NO2SQL_BLOCK_SYSTEM_DATABASES=true

构建、测试、发布

构建解决方案:

dotnet build No2SQL.sln

运行测试线束:

dotnet run --project No2SQL.Test

打包NuGet:

dotnet pack -c Release

发布NuGet包:

dotnet nuget push **/bin/Release/*.nupkg --api-key <your-api-key> --source https://api.nuget.org/v3/index.json

本地测试默认值

No2SQL.Test/Program.cs 支持环境变量重写:

变量 描述
NO2SQL_TEST_DATABASE 未提供数据库时使用的数据库
NO2SQL_TEST_COLLECTION 使用的集合 --test-stream 当没有供应时
NO2SQL_TEST_ROWS_PER_CHUNK 流种子检查的可选块大小覆盖
NO2SQL_TEST_LIMIT 流种子检查的可选最大文档计数覆盖
NO2SQL_TEST_BATCH_SIZE 可选的Mongo游标批量大小覆盖,用于流种子检查

CLI参数优先于环境变量。


贡献

根据麻省理工学院许可证,叉子和衍生作品是受欢迎的。

对官方No2SQL存储库的更改由维护人员自行决定是否接受。提交拉取请求并不能保证包含在内。


许可证

No2SQL根据MIT许可证获得许可。

版权所有(c)2026普里特·塔拉蒂

“No2SQL”是Preet Talati的商标。