MongoDB 如何支持类 SQL 查询

经常看到有人追寻 MongoDB 支持 SQL 的解决方案,得到的都是一些否定答案,去写 MongoDB 语法的脚本吧 /MongoDB 归类就是“NoSql”,有人解释为“not only sql”,也有人直接理解为“no sql”/ 十年前有个 github 项目Mongo JDBC Driver,一直处于实验阶段,看项目目标是把基本的 SQL 翻译成 MongoDB 脚本语法,但后来不了了之了。

看来,这确实是非常难得一件事!否则官方也早该把对 SQL 的支持内置了;即便没内置,众多的开源贡献者也应该在外面给出了可用的补丁。

关系数据库数据模型简单,都是行列分明的单层二维表;所以描述它的计算的语言(SQL)就相对简单;而 MongoDB 里是多层嵌套的结构,属性字段任意出现。光是描述清楚选取哪一层的哪些字段信息,都是件不容易的事,再加上进一步的分组、聚合、条件、排序运算,复杂程度指数级上升,这也是多年来基于 MongoDB 数据库计算一直困难的根本原因。

如果用彻底支持集合操作的集算器 SPL 语言,处理这种多层嵌套的数据结构就比较容易了,直接看代码:

 A
2=mongo_shell(A1,"computer.find()").fetch()
3=A2.new(_id:ID,income.array().sum():INCOME,output.array().sum():OUTPUT)

这和理想中的SQL基本上一模一样了:
SELECT _id:ID,income.array().sum():INCOME,output.array().sum():OUTPUT FROM computer

而做同样查询的 MongoDB 脚本则是如下的一个代码规模:

2png

MongoDB里整套的查询计算功能,都能用简洁的SPL脚本实现,就不一一在这里列举了。上面的例子摘自《玩转 Mongo 计算》

 

SPL能很方便地嵌入到JAVA应用,可参考《Java 如何调用 SPL 脚本》

具体使用方法可参考 《如何使用集算器》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值