如何使用Unity JDBC驱动程序加入两个MongoDB集合?

时间:2014-09-12 19:38:38

标签: sql mongodb jdbc

来自Unity JDBC download page

  

如果SQL查询需要MongoDB不支持的连接或函数,则查询将提升为UnityJDBC(试用版)。 UnityJDBC试用版没有到期日期,并且完全正常运行,但它最多只能返回100个结果。

但是,当我尝试使用任何语法(如

)连接两个表时
SELECT * from a, b WHERE a.id = b.id
SELECT * from a INNER JOIN b ON a.id = b.id
SELECT * from a INNER JOIN b USING (id)

结果如下:

Exception: java.sql.SQLException: ERROR: No schema defined.  The default schema location is _schema in the current database.  You need write permission to create this collection.  Otherwise, use the schema parameter to set a file location (e.g. schema=mongo.xml) to store the schema.  See connection parameters at http://www.unityjdbc.com/mongojdbc/ for more details.
java.sql.SQLException: ERROR: No schema defined.  The default schema location is _schema in the current database.  You need write permission to create this collection.  Otherwise, use the schema parameter to set a file location (e.g. schema=mongo.xml) to store the schema.  See connection parameters at http://www.unityjdbc.com/mongojdbc/ for more details.
    at mongodb.conn.ServerConnection.processMongoWithUnity(Unknown Source)
    at mongodb.conn.ServerConnection.executeQuery(Unknown Source)
    at mongodb.jdbc.MongoStatement.executeQuery(Unknown Source)
    at mongodb.ExampleMongoJDBC.doQuery(ExampleMongoJDBC.java:222)
    at mongodb.ExampleMongoJDBC.main(ExampleMongoJDBC.java:66)

好的,所以我查看了自述文件,发现它提到了代码/ test / dspec /文件夹,其中包含一些与模式相关的文件。我打开了几个,它们是所有集合中非常详细的xml文件,将它们映射到关系数据类型。

我是否必须写出其中一个,或者有没有办法自动生成它?

1 个答案:

答案 0 :(得分:0)

我收到了Unity团队的(快速)回复。

  

MongoDB JDBC驱动程序有两种模式。对于单个集合查询,它不构建架构。对于涉及联接或表达式的查询,它构建一个模式,默认情况下将其存储在当前Mongo数据库的_schema集合中。如果您没有写入数据库的权限,则会引发错误。

     

如错误中所述,您可以将架构参数设置为本地文件名(例如mongo.xml),并将其存储在您的计算机上而不是Mongo数据库中。您还可以使用具有写入权限的帐户。

     

要使其工作,请将schema = mongo.xml添加到您的连接URL,如下所示:

jdbc:mongo://localhost/dbname?schema=mongo.xml?rebuildschema=true

第一次完成此操作后,您可以删除rebuildschema = true,或者每次都重建它。

我唯一困惑的是我使用的数据库不需要身份验证。我甚至让一个具有写权限的用户连接到他,但仍然收到了上述错误。

- 编辑

我意识到你也可以做jdbc:mongo://localhost/dbname?rebuildschema=true。如果尚未创建架构,则将抛出先前的错误。