从MATLAB连接到MongoDB

时间:2010-10-07 22:49:11

标签: matlab mongodb

我正在尝试将MongoDB与MATLAB结合使用。虽然MATLAB没有supported driver,但是有一个用于Java。幸运的是我能够用它来连接数据库等。 我downloaded最新的(2.1)版本的jar文件并使用JAVAADDPATH安装它。然后我尝试按照Java tutorial

这是代码

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类,包含db中所有集合的名称列表。我怎么能把它转换成MATLAB的单元格数组?


更新:除了Amro's answer之外,这也有效:

wc = com.mongodb.WriteConcern();
coll.insert(doc,wc)

3 个答案:

答案 0 :(得分:10)

快速检查:

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,我建议您CheckClass使用UIInspectYair Altman实用程序

答案 1 :(得分:3)

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

https://github.com/gerald-lindsly/mongo-matlab-driver

答案 2 :(得分:2)

有关转换集合列表的次要问题,请使用toArray()方法。

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

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