MATLAB操作MongoDB数据库

2020-04-14 15:56:29 浏览数 (1)

自然语言处理中的分词结果,数字图像处理中的分割识别结果,它们通常有着不一样个数的单元,当我们需要逐个处理这些单元数据的时候如果全部导入MATLAB会占用大量内存,甚至卡死。

这里推荐使用MongoDB数据库来储存数据,前面的文章中介绍过MySQL数据库,适合于结构统一、形式一致的数据,不适合这里描述的情况。

MongoDB的安装是非常方便的,不用Google就可以找到详细安装步骤。安装完成后新建数据库、新建集合,就可以导入各种数据源,包括但不限于csv、json、xls...

数据成功导入之后就可以进入MATLAB环境中操作了,先安装MongoDB交互工具箱,可以点击Add-Ons搜索Database Toolbox interface for MongoDB后点击安装,也可以在这里下载:https://pan.baidu.com/s/1YZc6sEmZeU8FG59ypq7s8w 提取码:jb2n

安装好工具箱之后就可以操作MongoDb里面的数据了,这里举一个小栗子

代码语言:javascript复制
server = "127.0.0.1";
port = 27017;
dbname = "mongo";
% 连接MongoDb
conn = mongo(server,port,dbname);
% 检查是否连接成功
isopen(conn)
collection = "qu";
sortquery = '{"_id":1.0}';
index = 0;
map = containers.Map;
word = "";
% 循环读取、逐个处理
while 1
    doc = find(conn,collection,'Sort',sortquery,'Skip',index,'Limit',1);
    index = index   1;
    if isempty(doc)
        break;
    end
    % 可以是更复杂的操作
    for i=1:length(doc.tag)
        word = [word;doc.tag(i).word];
        if isKey(map,doc.tag(i).tag)
            map(doc.tag(i).tag)=map(doc.tag(i).tag) 1;
        else
            map(doc.tag(i).tag)=1;
        end
    end
    % pretend一些操作
    mongoquery = ['{"v":"' doc.v '"}'];
    documents = find(conn,collection,'Query',mongoquery)
    % 更新刚刚处理过的doc
    findquery = ['{"v":"' doc.v '"}'];
    updatequery = '{$set:{"treated":2}}';
    % 更新受影响的doc个数
    n = update(conn,collection,findquery,updatequery)
end
% 关闭连接
close(conn);
% 对出来结果进行展示

tags = keys(map);

plot(cell2mat(values(map)))

xticks(1:length(tags))

xticklabels(tags')

wordcloud(word)

0 人点赞