使用类似SQL语法访问MongoDB

8

是否有任何库可以使用类似SQL的语法访问MongoDB。

例如:

use db
select * from table1
insert into table1 values (a,b,c)
delete from table
select a,b,count(*) from table1 group by a,b
select a.field1,b.field2 from a,b where a.id=b.id

感谢 Raman。


3
为什么您想要这样做? - AD7six
1
如果您想使用SQL,请不要使用Mongodb,而是使用关系型数据库管理系统(RDBMS)。 - user1027503
2
有时候,当你想从关系型数据库转换到NoSql时,你会面临遗留问题,为了简化这个过程,你希望有一个像代理一样的东西,接受SQL并将其映射到NoSQL函数。 - Max
8个回答

7
学习曲线只有在你仅执行非常简单的 SQL 查询时才会很小。如果你的 SQL 查询范围只是“select * from X”,那么 MongoDB 看起来像是一个通过所有过于复杂的 SQL 的绝妙想法。但是,如果你需要执行左外连接、测试空值、检查范围、子查询、分组和汇总操作,那么你很快就会发现在切换到 Mongo 后,你的桌子上出现了一个圆形凹痕。最糟糕的事情是,你试图做的东西有一半时间无法在 Mongo 接口中完成。Mongo 代表了一个勇敢的新世界,在这个新世界中,数据库不再进行聚合和查询优化等操作,它只存储数据,而所有魔术都是通过检索所有内容、缓慢地将其存储在应用程序内存中,并在代码中执行所有操作而完成的。

尽管您的建议可能非常有价值,但您并没有回答问题;请考虑将此类输入作为评论编写。 - Trinimon
不,这仍然是一个伟大的答案,即使43年后。Mongo对于报告来说很糟糕。 - Byron Whitlock
非常棒的回答!恰好是某人所提出的问题所需要的信息类型。 - fred271828

5

是的!

一个名为UnityJDBC的公司制作了mongodb的JDBC驱动程序。与mongo java驱动程序不同,该JDBC驱动程序允许您在MongoDB上运行SQL查询,并且该驱动程序受到使用JDBC的任何Java应用程序的支持。

要下载此驱动程序,请访问...

http://www.unityjdbc.com/mongojdbc/mongo_jdbc.php

它也是免费下载的!

希望这可以帮助到您。


2

MoSQL 可能会满足您的需求。它需要您运行一个新的 PostgreSQL 实例,但从那里您可以使用 SQL 查询整个 Mongo 数据集。

"MoSQL 将 MongoDB 数据库群集的内容导入到 PostgreSQL 实例中,使用 oplog tailer 使 SQL 镜像保持实时更新。这使您可以针对 MongoDB 数据库运行生产服务,然后使用完整的 SQL 功能运行离线分析或报告。"


1

有一些解决方案可用,但几乎所有解决方案都无法真正以“关系型”思维方式呈现MongoDB数据模型,这是ODBC/JDBC应用程序和用户所需的。最近推出了一款商业产品来解决这些挑战。

ODBC: http://www.progress.com/products/datadirect-connect/odbc-drivers/data-sources/mongodb

JDBC: http://www.progress.com/products/datadirect-connect/jdbc-drivers/data-sources/mongodb

为满足对ODBC/JDBC(SQL)访问的需求...虽然有很多理由选择使用Mongo的客户端编写新应用程序,但市场上仍然存在对高质量ODBC/JDBC和基于SQL的访问MongoDB的强烈需求。这种需求主要来自依赖ODBC/JDBC连接并且不提供与MongoDB本机集成的所有报告、分析和BI应用程序。

我已经尝试使用Progress JDBC/MongoDB驱动程序进行“group by -having”查询,但与MongoDB本地聚合框架相比,性能非常糟糕。 - Kanatoko

1

免费的NoSQL Viewer支持将SQL查询转换为MongoDB shell语法。此外,在SQL Viewer中,您甚至可以使用SQL SELECT语句查询MongoDB集合数据,而无需了解MongoDB查询语法。在这里查看NoSQL Viewer www.spviewer.com/nosqlviewer.html


1
请看这个最近的项目:http://www.mongosql.com/。我在过去几周一直在研究它,看起来非常有前途。
对于那些质疑SQL在MongoDB中的实用性的人,请考虑许多组织中不太技术化的用户(例如业务分析师),他们可能知道SQL,但不想跨越到JavaScript和JSON。像mongoSQL这样的工具可以帮助推动MongoDB在组织中的采用。

-2

-2

目前有几个项目正在进行中,旨在模拟MongoDB的SQL接口。虽然它们提供了一个熟悉的界面,但通常应该避免使用它们。它们基于一个根本上错误的前提,即解析字符串并将其转换为方法调用。

一旦您开始使用MongoDB,您会发现使用类和方法的方法更容易访问,因为它与应用程序的所有其他部分完全相同。是的,当您第一次开始时,可能会有一些学习曲线,但大多数情况下,MongoDB中的接口按照您的预期工作。


1
将字符串解析并将其转换为方法调用的系统绝对不是“根本有缺陷的前提”。每种基于控制台和脚本的编程语言都这样做。运行时评估非常强大-将MapReduce指令在C ++中编译与从脚本动态生成它们真的有什么区别吗? - ShadowChaser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接