粘贴任意 SQL 查询,立即获得对应的 MongoDB 写法。支持 SELECT、INSERT、UPDATE、DELETE、GROUP BY、HAVING、LIKE、IN、IS NULL 等。
本工具把标准 SQL 查询翻译成 MongoDB 的等价语法。MongoDB 是一种面向文档的 NoSQL 数据库。工具面向正在从关系型数据库迁移,或者需要同时使用两种数据库的开发者。
在左侧面板输入 SQL 查询,对应的 MongoDB 查询会即时显示在右侧。解析由真正的 SQL 解析器完成,因此复杂的 WHERE 条件和基础聚合都能被正确转换,而不是靠猜测。
支持的 SQL 操作列的选择与 WHERE 条件会转换为 MongoDB 的 find() 调用,包含查询过滤器和投影。
ORDER BY 转换为 sort(),LIMIT 转换为 limit(),OFFSET 转换为 skip()。
GROUP BY 与聚合函数(COUNT、SUM、AVG、MIN、MAX)一起使用时,会转换为 MongoDB 的聚合管道。
HAVING 过滤条件会成为管道中的第二个 $match 阶段,在分组完成之后执行。
使用 %(任意字符)和 _(单个字符)的 SQL LIKE 模式会转换为 MongoDB 的正则表达式。
完整支持 IN/$in、NOT IN/$nin、IS NULL、IS NOT NULL/$ne、AND/$and 与 OR/$or,包括用括号分组条件。
单行 INSERT 转换为 insertOne(),多行 INSERT 转换为 insertMany()。列名会成为文档的字段名。
SET 子句会转换为 MongoDB 的 $set 操作符,WHERE 条件则成为过滤文档。
带 WHERE 条件的 DELETE FROM 会转换为 deleteMany()。请谨慎使用:没有 WHERE 时会删除集合中的全部文档。
| SQL 操作符 | MongoDB 操作符 | 说明 |
|---|---|---|
| = | $eq (or implicit) | 精确匹配 |
| != / <> | $ne | 不等于 |
| > | $gt | 大于 |
| >= | $gte | 大于或等于 |
| < | $lt | 小于 |
| <= | $lte | 小于或等于 |
| IN (...) | $in | 值在列表中 |
| NOT IN (...) | $nin | 值不在列表中 |
| LIKE '%x%' | $regex: /.*x.*/ | % 变为 .*,_ 变为 . |
| NOT LIKE | $not: /pattern/ | 取反的正则表达式 |
| IS NULL | field: null | 同时匹配不存在的字段 |
| IS NOT NULL | $ne: null | 字段存在且不为 null |
| AND | $and | 所有条件都必须满足 |
| OR | $or | 满足任意一个条件即可 |
| COUNT(*) | $sum: 1 | 位于 $group 阶段内 |
| SUM(f) | $sum: "$f" | 位于 $group 阶段内 |
| AVG(f) | $avg: "$f" | 位于 $group 阶段内 |
| MIN(f) | $min: "$f" | 位于 $group 阶段内 |
| MAX(f) | $max: "$f" | 位于 $group 阶段内 |
| ORDER BY ASC | sort({ f: 1 }) | 升序 |
| ORDER BY DESC | sort({ f: -1 }) | 降序 |
| LIMIT n | limit(n) | |
| OFFSET n | skip(n) |
正在从 MySQL、PostgreSQL、SQL Server 或 SQLite 迁移到 MongoDB?快速翻译已有的查询逻辑,降低迁移过程中出错的风险。
如果你已经熟悉 SQL,把每个概念与其对应写法并排对照,是掌握 MongoDB 查询语言及其背后文档模型最快的途径。
即使是经验丰富的 MongoDB 开发者,也常常先用 SQL 思考。把本工具当作速查表,把脑中的想法翻译成正确的语法。
把转换后的查询分享给来自关系型数据库背景的同事。一份共同的参考能减少两种数据库文化之间的摩擦。
把 SQL 语句粘贴到输入面板并点击转换。工具会解析这段 SQL,返回等价的 MongoDB shell 命令:SELECT 变成 find(),WHERE 条件变成查询过滤器,ORDER BY 变成 sort(),LIMIT 和 OFFSET 变成 limit() 与 skip()。无需注册,也无需安装任何软件。
MongoDB 没有 LIKE 关键字,模式匹配通过 $regex 实现。SQL 的通配符 % 对应 .*,通配符 _ 对应单个点号。因此 WHERE name LIKE '%mongo%' 会转换为 { name: { $regex: /.*mongo.*/ } },而 NOT LIKE 会被包在 $not 中。
GROUP BY 对应带 $group 阶段的聚合管道。分组的列会成为该阶段的 _id,聚合函数则成为累加器:COUNT(*) 变成 { $sum: 1 },SUM(字段) 变成 { $sum: "$字段" },AVG、MIN 和 MAX 分别对应 $avg、$min 和 $max。HAVING 子句会成为放在 $group 之后的第二个 $match 阶段。
不能自动处理。MongoDB 中的 JOIN 需要 $lookup 阶段,同时还要决定关联数据应当内嵌还是引用,这取决于你的模式设计,无法仅凭 SQL 推断。请在此转换单表查询,然后自行加上 $lookup 阶段。
不可以。本转换器翻译的是查询语法,而不是数据本身。要迁移数据行,需要使用迁移工具,例如 MongoDB Relational Migrator,它是免费的,支持 Oracle、SQL Server、MySQL 和 PostgreSQL。可以同时使用本转换器来翻译应用代码中已有的查询。
是的。本工具完全免费,在浏览器中运行,不需要账号,也不会保存你的任何查询。提供英语、意大利语、俄语、中文、法语和西班牙语六种界面语言。
转换查询只是最后一步。这些指南讲的是决定迁移成败的部分:如何把关系型结构重新设计成文档模型。