SQL到MongoDB查询转换器
将 SQL 查询(SELECT、INSERT、UPDATE、DELETE)转换为 MongoDB shell 语法,支持逐句映射、聚合管道生成、实时语法高亮以及可直接粘贴的 mongosh 输出。
检测到广告拦截,导致我们无法展示广告
MiniWebtool 依靠广告收入免费提供服务。如果这个工具帮到了你,欢迎开通 Premium(无广告 + 更快),或将 MiniWebtool.com 加入白名单后刷新页面。
- 或升级 Premium(无广告)
- 允许 MiniWebtool.com 显示广告,然后刷新
SQL到MongoDB查询转换器
欢迎使用 sql到mongodb查询转换器,这是一个在线工具,可将 SQL 查询(SELECT、INSERT、UPDATE 和 DELETE)转换为简洁、可直接粘贴的 MongoDB shell 语法。每次转换都配有逐句映射,展示了每个 SQL 关键字如何变为对应的 MongoDB 等效项,使此工具既是一个转换器,也是开发人员从关系型数据库迁移到 MongoDB 的学习助手。
为什么要使用此 sql到mongodb查询转换器?
大多数在线转换器只是简单地给出一个 JSON 数据块,让你去猜测发生了什么。这个工具不同:你会看到生成的 MongoDB 查询以及一个逐步映射,解释了为什么每个子句会以这种方式转换。这使得它在迁移过程中的快速转换以及从现有的 SQL 知识学习 MongoDB 查询语言方面都同样有用。
主要特点
- 四种语句类型: SELECT (find, distinct, countDocuments, aggregate), INSERT, UPDATE, DELETE —— 全部集成在一个工具中。
- 逐句映射: 查看 FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET 如何分别转化为 MongoDB 操作符。
- 自动聚合管道: GROUP BY、HAVING 和聚合函数会生成正确的 aggregate([...]) 管道,并按正确顺序排列 $match, $group, $sort, $limit 阶段。
- 丰富的 WHERE 支持: AND, OR, NOT, 括号, IN, NOT IN, BETWEEN, LIKE, IS NULL, IS NOT NULL,以及所有六种比较操作符。
- 语法高亮输出: 易于阅读,可直接粘贴到 mongosh, MongoDB Compass 或 Studio 3T。
- 操作符速查表: 始终可见的参考卡片,包含 24 种常见的 SQL ↔ MongoDB 映射。
- 快速加载示例: 九个真实世界的示例,点击即可加载。
- 复制和下载: 一键复制到剪贴板或保存为 .js 文件。
- 移动端适配: 布局适应手机和平板电脑 —— 映射面板在窄屏幕上会自动垂直堆叠。
此转换器可以将哪些 SQL 语句转换为 MongoDB?
该工具可转换 SELECT, INSERT, UPDATE 和 DELETE 语句。SELECT 支持 WHERE、ORDER BY、GROUP BY、HAVING、LIMIT、OFFSET、DISTINCT 以及五种标准聚合函数:COUNT、SUM、AVG、MIN 和 MAX。带有 AND、OR、NOT、IN、NOT IN、BETWEEN、LIKE、IS NULL 和 IS NOT NULL 的复杂 WHERE 子句都能清晰地映射到 MongoDB 操作符。
逐句映射是如何工作的?
每次转换后,工具会显示一个表格,将每个 SQL 子句与其 MongoDB 等效项对齐。例如:
MongoDB: db.users.find({ age: { $gt: 21 } }, { name: 1, age: 1, _id: 0 }).sort({ age: -1 }).limit(10)
映射:
· FROM users → db.users
· SELECT name, age → 投影 { name: 1, age: 1, _id: 0 }
· WHERE age > 21 → 过滤器 { age: { $gt: 21 } }
· ORDER BY age DESC → .sort({ age: -1 })
· LIMIT 10 → .limit(10)
它能处理 GROUP BY 查询的聚合管道吗?
是的。当 SQL 使用 GROUP BY、HAVING 或聚合函数时,转换器会生成一个完整的 MongoDB 聚合管道:分组前的 $match(来自 WHERE)、带有 _id 和累加器的 $group、分组后的 $match(来自 HAVING),然后按管道顺序执行 $sort, $skip 和 $limit。顺序非常重要 —— 在 MongoDB 中,在 $match 之前执行 $sort 会慢得多 —— 因此工具始终按最优顺序输出阶段。
变为:
db.books.aggregate([
{ $match: { year: { $gte: 2020 } } },
{ $group: { _id: "$category", total: { $sum: 1 } } },
{ $match: { total: { $gt: 5 } } },
{ $sort: { total: -1 } },
{ $limit: 5 }
])
SQL LIKE 模式是如何转换的?
在 MongoDB 正则表达式中,SQL % 通配符变为 .*,_ 通配符变为 .。当 SQL 模式不以 % 开头或结尾时,模式会用 ^ 或 $ 锚定。模式内部的特殊正则字符会自动转义。
- LIKE 'abc%' → /^abc.*/
- LIKE '%.com' → /.*\.com$/
- LIKE '%widget%' → /.*widget.*/
- LIKE 'a_c' → /^a.c$/
SQL 和 MongoDB 查询之间的主要区别是什么?
SQL 是声明性的且以表为导向的 —— 你描述行和列。MongoDB 是以文档为导向的,使用类似 JSON 的查询语言。主要的转换规则:
- 表 → 集合。 FROM users 变为 db.users。
- 行 → 文档。 包含 name, age, email 列的 SQL 行变为包含这些字段名的 MongoDB 文档。
- WHERE → 过滤器对象。 MongoDB 中 find() 的第一个参数是一个过滤器文档,使用诸如 $gt, $in, $and 之类的操作符。
- SELECT 列表 → 投影。 find() 的第二个参数指定包含 (1) 或排除 (0) 哪些字段。_id 字段默认包含在内,除非你将其设置为 0。
- ORDER BY → .sort(), LIMIT → .limit(), OFFSET → .skip()。 这些在 find() 后变成链式方法调用。
- GROUP BY → $group。 将多行减少为一行的聚合运行在聚合管道内。
- JOIN → $lookup。 SQL 联接映射到聚合中的 $lookup 阶段。(此工具目前专注于单表查询;检测到联接时会显示建议。)
生成的 MongoDB 查询可以直接粘贴到 mongosh 中吗?
是的。输出使用 mongosh(MongoDB Shell)语法,包括不带引号的对象键、尾部链式方法(如 .sort()、.limit() 和 .skip())以及原生 JavaScript 正则表达式字面量。你可以直接将其粘贴到 mongosh、MongoDB Compass 的 MongoSH 选项卡或 Studio 3T 的 IntelliShell 中。
如何使用此工具
- 粘贴您的 SQL 查询到输入框中,或点击快速示例加载示例查询。
- 点击转换为 MongoDB。 工具会解析您的 SQL 并构建等效的 MongoDB 查询。
- 查看逐句映射以验证转换并学习映射规则。
- 复制或下载 MongoDB 查询,使用代码块上方的按钮。下载的文件是一个可以直接运行的 .js 脚本。
实际使用场景
对于迁移到 MongoDB 的开发人员
- 将旧的 SQL 报表移植到 MongoDB 聚合管道。
- 转换来自文档、Stack Overflow 答案或架构设计指南的 SQL 查询。
- 生成基础 MongoDB 查询,然后你可以通过索引和投影对其进行优化。
对于学生和学习者
- 理解两种根本不同的查询语言之间的映射。
- 通过从你已经掌握的 SQL 开始,建立对 MongoDB 文档模型的直观认识。
- 在从头编写 MongoDB 查询时,将操作符速查表用作快速参考。
对于 DBA 和后端工程师
- 在审查拉取请求时快速检查候选 MongoDB 查询。
- 在架构迁移期间,在生产数据上运行查询前进行原型设计。
- 将子句映射作为教学材料与初级团队成员分享。
局限性及尚不支持的内容
- JOINs —— MongoDB 的 JOIN 等效项需要 $lookup 阶段,其中包含外键设计决策,静态转换器并不总是能够推断。目前,请转换单表查询,并在需要时手动将其包装在 $lookup 中。
- 子查询 —— 不解析标量和关联子查询。请尝试将其分解为两个独立的查询。
- CTEs / WITH 子句 —— 不支持;请先将 CTE 提取为独立查询。
- UNION / UNION ALL —— 请手动使用 $unionWith。
- 窗口函数 —— 在 MongoDB 5.0+ 中使用 $setWindowFields。
- 复杂的 SET 表达式 —— UPDATE 值必须是字面量;诸如 SET x = x + 1 之类的算术运算需要 MongoDB 的 $inc 操作符,需手动添加。
常见问题解答
为什么我不带 WHERE 的 SELECT 查询仍然返回一个过滤器对象?
MongoDB 的 find() 要求第一个参数为过滤器。当 SQL 没有 WHERE 子句时,工具会发出 find({}) —— 一个匹配所有文档的空过滤器。
为什么我的投影中添加了 _id: 0?
MongoDB 默认在查询结果中包含 _id 字段。为了匹配 SQL 仅返回所列列的 SELECT 行为,除非你显式将 _id 列出,否则工具会附加 _id: 0。
我的 UPDATE 查询应该使用 updateOne 还是 updateMany?
工具默认发出 updateMany,这符合 SQL UPDATE 的多行语义。当你确定过滤器匹配单个文档时(例如,通过唯一的 _id 过滤),请切换到 updateOne。
该工具会存储或发送我的 SQL 到任何地方吗?
您的 SQL 被提交到我们的服务器进行解析,作为转换后的 MongoDB 返回,然后被丢弃。它不会被记录、存储或与任何第三方共享。
这个工具免费吗?
是的,它完全免费,无需账户即可使用。随时刷新页面即可重新开始。
如何处理 MongoDB 的原生类型,如 ObjectId 和 Date?
SQL 字符串字面量默认变为 MongoDB 字符串。如果你的列存储的是 ObjectId,请手动将字面量包装在 ObjectId("...") 中。对于日期字段,请将字面量包装在 ISODate("...") 中。粘贴后,这两项替换操作只需一秒钟即可完成。
其他资源
引用此内容、页面或工具为:
"SQL到MongoDB查询转换器" 于 https://MiniWebtool.com/zh-cn/sql到mongodb查询转换器/,来自 MiniWebtool,https://MiniWebtool.com/
由 miniwebtool 团队开发。更新日期:2026年4月25日
其他相关工具:
其他文字工具:
- 相同字母异序词生成器
- 仿生阅读转换器 新
- 比较两个字符串
- 找最长一行工具
- AI语言检测器 精选
- 文本行处理器
- XML验证器 精选
- 文本转语音阅读器 新
- 文本列提取器 新
- JSON转YAML转换器 新
- 正则表达式测试器 新
- 文本差异对比工具 新
- CSV转JSON转换器 新
- 图片Base64转换器 新
- API测试工具 新
- ASCII码表 新
- Webhook测试器 新
- AI博客标题生成器 新
- AI 话题标签生成器 新
- AI标语生成器 新
- AI文章大纲生成器 新
- 在线记事本 新
- TOML 转 JSON 转换器 新
- JSON 转 CSV 转换器 新
- XML转JSON转换器 新
- SQL到MongoDB查询转换器 新