写点什么

疯狂 SQL 转换系列 - SQL for MongoDB

作者:数由科技
  • 2023-05-11
    北京
  • 本文字数:897 字

    阅读完需:约 3 分钟

疯狂SQL转换系列- SQL for MongoDB

关于使用 SQL 访问 MongoDB 的解决方案,网络上已经可以查到很多。有相当一部分都是比较重的,有的需要安装插件,通过插件界面进行查询交互的,如:DataGrip;有的需要安装分布式计算引擎,并能提供更好的访问性能及应用效果,如:Presto。而对于一些采用 MongoDB 数据库而没有特别复杂应用的开发场景,即直接使用 sql 就能很好满足数据库访问需求的轻量级应用场景,方案相对较少一些。本文将介绍一种由 MOQL-Transx 开源项目提供的采用 sql 检索 MongoDB 的轻量级解决方案。

MOQL-Transx 是一个致力于减少开发者学习成本,用 SQL 语法检索各类数据库的开源项目。项目包括两个模块,moql-translator 用于完成从 MOQL(SQL92 语法子集)到各类数据库 DSL 的翻译;moql-querier 用于完成对各类数据库以 SQL 语言检索并获得二维结果的输出。由于 MongoDB 并没有一个完整意义上的 DSL,故本文介绍的部分主要是使用 moql-querier 中的 MongoDBQuerier 类来完成对 MongoDB 的检索。如果有兴趣查看实现,也可以通过 moql-translator 中的 MongoDBTranslator 来了解其如何将 SQL 语法转换为了伪 MongoDB DSL。(注:详见https://github.com/colorknight/moql-transx readme 中的用 SQL 访问 MongoDB 的章节)。

言归正转,如何使用 SQL 访问 MongoDB 数据库呢,只要用下面几行代码就可以搞定,超级简单。

// 构建MongoDB查询器MongoDBQuerier dataQuerier = new MongoDBQuerier();String[] serverIps = new String[] { "172.30.30.8" };Properties properties = new Properties();// 完成对MongoDB的连接dataQuerier.connect(serverIps, properties);// 输入SQL语句,返回二维结果集,类似与JDBC的ResultSetRecordSet recordSet = dataQuerier.query("select w.dns, w.ip from mydb.web w where (w.port=443 or w.port=8080) and w.ip='127.0.0.1' or w.ip='127.0.0.2'");// 打印输出outputRecordSet(RecordSet recordSet)
复制代码

该方案中,常用的 SQL 语法基本都能使用,都对 MongoDB 中类似的功能进行了映射。支持的语法子句包括:Select、From、LeftJoin、Where、GroupBy、Having、OrderBy、Limit,其中更细的语法支持对应表可以参见项目 readme 中的相应章节的说明。

用户头像

数由科技

关注

还未添加个人签名 2019-03-22 加入

还未添加个人简介

评论

发布
暂无评论
疯狂SQL转换系列- SQL for MongoDB_sql_数由科技_InfoQ写作社区