我正在尝试将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)
答案 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使用UIInspect和Yair Altman实用程序
答案 1 :(得分:3)
现在有一个专门为连接MongoDB和Matlab而构建的驱动程序。它建立在mongo-c-driver之上。来源可以在github上找到:
答案 2 :(得分:2)
有关转换集合列表的次要问题,请使用toArray()
方法。
>> cList=cell(colls.toArray())
cList =
'foo'
'system.indexes'
'things'