Подключение к MongoDB из MATLAB - PullRequest
       11

Подключение к MongoDB из MATLAB

8 голосов
/ 08 октября 2010

Я пытаюсь использовать MongoDB с MATLAB. Хотя не поддерживается поддерживаемый драйвер для MATLAB, он есть для Java. К счастью, я смог использовать его для подключения к БД и т. Д. Я скачал последнюю (2.1) версию jar-файла и установил ее с JAVAADDPATH. Затем я попытался следовать руководству по Java .

Вот код

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 класса. Поэтому последняя команда возвращает ошибку:

??? Не найдено метода «insert» с соответствующей подписью для класса «com.mongodb.DBApiLayer $ MyCollection».

В учебнике переменная coll создается явно как объект DBCollection:

DBCollection coll = db.getCollection("testCollection")

Я что-то не так делаю в MATLAB? Есть идеи?

Еще один незначительный вопрос о colls переменной. Это com.mongodb.util.OrderedSet класс и содержит список имен всех коллекций в БД. Как я могу преобразовать его в массив ячеек MATLAB?


Обновление : В дополнение к ответ Амро это также работает:

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

Ответы [ 3 ]

10 голосов
/ 08 октября 2010

Быстрая проверка:

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);

Примечание:Если вы используете Java в MATLAB, я предлагаю вам использовать утилиты CheckClass и UIInspect от Яир Альтман

3 голосов
/ 01 февраля 2012

Теперь есть встроенный драйвер для соединения MongoDB и Matlab.Он построен поверх mongo-c-driver.Источник можно найти на github:

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

2 голосов
/ 08 октября 2010

Для незначительного вопроса о преобразовании списка коллекций используйте метод toArray().

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

cList = 
  'foo'
  'system.indexes'
  'things'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...