SQL语句转MongoDB执行方法

Crabc是低代码开发平台,企业级API发布管理系统,通过在线编写通用SQL并发布成一个Rest接口对外提供服务。

Crabc是低代码开发平台,企业级API发布管理系统,通过在线编写通用SQL并发布成一个Rest接口对外提供服务。只要是支持SQL标准语法的数据库理论上Crabc都是支持直接使用的,目前已经实现了对SQL数据库和NoSQL ElasticSearch的SQL方式接入,正在考虑接入MongoDB数据库。MongoDB是文档数据库,没有像ES那样有SQL语法查询的扩展实现,目前只能考虑引入第三方组件或者是进行SQL转换。

支持MongoDB使用类SQL语法查询的开源组件有PrestoDB、Trino和Calcite。简单的了解了一下它们的功能,它们都是计算类框架且内部都定义了一套自己的规则 比较重量级,暂时没有考虑引入这几个框架。本来想自己写一个SQL转换工具类的,幸运的是在Github闲逛时搜到了一个SQL转MongoDB的开源工具,sql-to-mongo-db-query-converter (开源地址:https://github.com/vincentrussell/sql-to-mongo-db-query-converter)

看了一下它的介绍和SQL转换效果,感觉还是挺符合目前我要在Crabc上接入MongoDB的实现的功能的。基本上通用的查询语法,像时间函数,like、in、distinct、group/order和join都支持,也支持修改和删除语法。目前感觉还是可以用上的,先进一步看看源码在准备引入到Crabc中实现对MongoDB的通用SQL查询。后续实在不支持的语法也可以自己进行扩展实现(这工具包是Java开发的)。

SQL转换结果

Date

select * from my_table where date(column,'YYYY-MM-DD') >= '2023-03-26'
******Result:*********

db.my_table.find({
  "column": {
    "$gte": {
      "$date": 12111122221
    }
  }
})

Distinct

select distinct column1 from my_table where value IS NULL
******Result:*********

db.my_table.distinct("column1" , {
  "value": {
    "$exists": false
  }
})

Like

select * from my_table where value LIKE 'test%'
******Result:*********

db.my_table.find({
  "value": {
    "$regex": "^test.*#34;
  }
})

In

select column1 from my_table where value IN ("test"")
******Result:*********

db.my_table.find({ 
	"value" : { 
		"$in" : ["test"] 
		}
})

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/8227.html

(0)
上一篇 2023年 4月 21日 下午8:51
下一篇 2023年 4月 21日 下午8:51

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信