SQL检索MongoDB的轻量级解决方案

2022-02-28 11:48:57 浏览数 (1)

关于使用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数据库呢,只要用下面几行代码就可以搞定,超级简单。

代码语言:javascript复制
// 构建MongoDB查询器
MongoDBQuerier dataQuerier = new MongoDBQuerier();
String[] serverIps = new String[] { "172.30.30.8" };
Properties properties = new Properties();
// 完成对MongoDB的连接
dataQuerier.connect(serverIps, properties);
// 输入SQL语句,返回二维结果集,类似与JDBC的ResultSet
RecordSet 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中的相应章节的说明。

0 人点赞