Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MATLAB连接MongoDB_Matlab_Mongodb - Fatal编程技术网

从MATLAB连接MongoDB

从MATLAB连接MongoDB,matlab,mongodb,Matlab,Mongodb,我正在尝试使用MATLAB。虽然没有MATLAB的版本,但有一个是Java的版本。幸运的是,我能够使用它连接到数据库,等等。 我更新了jar文件的最新(2.1)版本,并使用JAVAADDPATH安装它。然后,我试着跟着这条路走 这是密码 javaaddpath('c:\MATLAB\myJavaClasses\mongo-2.1.jar') import com.mongodb.Mongo; import com.mongodb.DB; import com.mongodb.DBCollect

我正在尝试使用MATLAB。虽然没有MATLAB的版本,但有一个是Java的版本。幸运的是,我能够使用它连接到数据库,等等。 我更新了jar文件的最新(2.1)版本,并使用JAVAADDPATH安装它。然后,我试着跟着这条路走

这是密码

javaaddpath('c:\MATLAB\myJavaClasses\mongo-2.1.jar')

import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;

m = Mongo(); % connect to local db
db = m.getDB('test'); % get db object
colls = db.getCollectionNames(); % get collection names
coll = db.getCollection('things'); % get DBCollection object

doc = BasicDBObject();
doc.put('name', 'MongoDB');
doc.put('type', 'database');
doc.put('count', 1);
info = BasicDBObject();
info.put('x', 203);
info.put('y', 102);
doc.put('info', info);
coll.insert(doc);
这是我叠的地方
coll
应该是
DBCollection
对象,但实际上是
com.mongodb.DBApiLayer$MyCollection
类的对象。因此,最后一个命令返回错误:

???没有为类“com.mongodb.DBApiLayer$MyCollection”找到具有匹配签名的方法“insert”。

在本教程中,
coll
变量显式创建为DBCollection对象:

DBCollection coll = db.getCollection("testCollection")
我在MATLAB中做错了什么吗?有什么想法吗

关于
colls
变量的另一个小问题。它是
com.mongodb.util.OrderedSet
类,包含数据库中所有集合的名称列表。如何将其转换为MATLAB的单元阵列


更新:除此之外:

wc = com.mongodb.WriteConcern();
coll.insert(doc,wc)
快速检查:

methodsview(coll)        %# or: methods(coll, '-full')
显示它需要一个数组:

com.mongodb.WriteResult  insert(com.mongodb.DBObject[])
请尝试以下方法:

doc(1) = BasicDBObject();
doc(1).put('name', 'MongoDB');
doc(1).put('type', 'database');
...
coll.insert(doc);


注意:如果您在MATLAB中使用Java,我建议您使用和实用程序by

对于有关转换集合列表的小问题,请使用
toArray()
方法

>> cList=cell(colls.toArray())

cList = 
  'foo'
  'system.indexes'
  'things'

现在有一个专门为连接MongoDB和Matlab而构建的驱动程序。它构建在mongo-c-driver之上。可以在github上找到源:


+1。该方法需要一个数组(或者更确切地说是一个vararg)。自从Java5以来,现在有了varargs,所以从Java中,您可以直接用DBObject调用它。这是否意味着MatlabJava绑定中不支持varargs?我记得,Java varargs只是数组构造非常有用答案的语法糖。谢谢。我对MATLAB中的Java不是很有经验,但我正在学习。谢谢这对我很有帮助,为我节省了一些真正的RTMFing。很有趣。我要试一试。谢谢。这似乎没有在Mac OS上编译,而且似乎已经被放弃了(或者至少肯定没有被积极开发/支持)…小心这一点。我花了几个小时试图通过不断地用谷歌搜索我得到的所有错误来链接所有的外部文件,但仍然不起作用。作者提供了关于你应该如何实现这一点的两条模糊的线。我只能证实这一点。我也很难让它在windows上运行。java驱动程序甚至C#驱动程序(请参阅)都是更好的选择。