热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java程序中批量操作MongoDB的gridfs演示

2012111302:36PM636次查看GridFS是一种在MongoDB中存储大二进制文件的机制。它默认使用fs.chunks和fs.files来存储文件。其中fs.files集合存放文件的信息,fs.chunks存放文件数据。下面的方法返回一个GridFSDBFile的集合publicListDBObjectli
2012 11 13 02:36 PM 636次查看 GridFS是一种在MongoDB中存储大二进制文件的机制。它默认使用fs.chunks和fs.files来存储文件。其中fs.files集合存放文件的信息,fs.chunks存放文件数据。

下面的方法返回一个GridFSDBFile的集合

public List listGirdFS() {
        DB db = getMongoTemplate().getDb();
        GridFS gridFS = new GridFS(db);
        try{
                DBCursor cursor = gridFS.getFileList();
                return cursor.toArray();
        }
        catch (Exception e){
                logger.error(e.getMessage());
        }
        return null;
}
如果你直接进行一下操作的话,程序将会抛出一个"no gridfs!"的运行时异常。 public void migration() {
        for (DBObject object : listGirdFS()) {
                GridFSDBFile file = (GridFSDBFile)object;
                file.writeTo(new File(file.getFileName()));
        }
}
这是因为文件的信息存放在fs.files上,文件数据存放在fs.chunks上。批量查找数据的时候只是返回文件的信息,这样能够减轻程序的压力。

因此正确的做法是

public void migration() {
        for (DBObject object : listGirdFS()) {
                String fileName = ((GridFSDBFile)object).getFilename();
                GridFSDBFile file = findGridFSByName(fileName);
                file.writeTo(new File(file.getFileName()));
        }
}
其中findGridFSByName(fileName)方法定义如下: public GridFSDBFile findGridFSByName(String fileName) {
        DB db = getMongoTemplate().getDb();
        GridFS gridFS = new GridFS(db);
        try{
                GridFSDBFile gridFSDBFile = gridFS.findOne(fileName);
                return gridFSDBFile;
        }
        catch (Exception e){
                logger.error(e.getMessage());
        }
        return null;
}

推荐阅读
author-avatar
潇湘V烟雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有