`
裴小星
  • 浏览: 264980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27803
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:74004
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:62896
社区版块
存档分类
最新评论

MongoDB Java Driver 源码分析(11):GridFS 类

阅读更多
  GridFS 类在 com.mongodb.gridfs 包中的地位类似于 Mongo 类在 com.mongodb 包的作用,主要是提供对外的接口。
  它的各个方法是分别委托给不同的类执行的,尤其是 DBColletion 类的实例 _filesCollection  和 _chunkCollection 。

  我们先看看它的构造函数:
    /**
     * 在数据库中为指定的 bucket 创建 GridFS 实例
     * bucket 可以认为是标识符,用于区分不同的 GridFS 的实例,类似于传统数据库中的不同表
     * 默认的 bucket 是 "fs"
     */
    public GridFS(DB db, String bucket) {
        // DB 实例
        _db = db;

        // bucket 名称
        _bucketName = bucket;

       // files 集合,是 DBCollection 类的实例,用于存放文件的基本信息
        _filesCollection = _db.getCollection( _bucketName + ".files" );

        // chunks 集合,是 DBCollection 类的实例,用于存放文件的数据
        _chunkCollection = _db.getCollection( _bucketName + ".chunks" );

        // 如果数据集合较小的话,创建索引
        if (_filesCollection.count() < 1000)
            _filesCollection.ensureIndex( BasicDBObjectBuilder.start().add( "filename" , 1 ).add( "uploadDate" , 1 ).get() );
        if (_chunkCollection.count() < 1000)
            _chunkCollection.ensureIndex( BasicDBObjectBuilder.start().add( "files_id" , 1 ).add( "n" , 1 ).get() );

        // 设置 files 集合中存放的数据类型,这里指定为 GridFSDBFile
        _filesCollection.setObjectClass( GridFSDBFile.class );
    }

  可以看到,在构造函数中为属性 _db,_filesCollection ,_chunkCollection 进行了赋值,后续的操作都需要委托给这些属性。

_db 的相关操作 (数据库级别的操作)

    // 获取该 GRidFS 实例所属的 DB 实例
    public DB getDB(){
        return _db;
    }

_filesCollection 的相关操作(针对文件基本信息的操作)

    // 获取用于遍历文件列表的 DBCursor,按文件名称升序排列
    public DBCursor getFileList(){
        return _filesCollection.find().sort(new BasicDBObject("filename",1));
    }

   // 根据指定的query,获取用于遍历文件列表的 DBCursor,按文件名称升序排列
   public DBCursor getFileList( DBObject query ){
        return _filesCollection.find( query ).sort(new BasicDBObject("filename",1));
    }

    // 根据特定条件获取文件列表
    public List<GridFSDBFile> find( DBObject query ){
        List<GridFSDBFile> files = new ArrayList<GridFSDBFile>();

        DBCursor c = _filesCollection.find( query );
        while ( c.hasNext() ){
            files.add( _fix( c.next() ) );
        }
        return files;
    }

    // 对通过 find 方法返回的结果进行处理
    private GridFSDBFile _fix( Object o ){
        if ( o == null )
            return null;

        // 包含的数据类型不是 GridFSDBFile,抛异常
        if ( ! ( o instanceof GridFSDBFile ) )
            throw new RuntimeException( "somehow didn't get a GridFSDBFile" );

        // 设置属性 GridFSDBFile._fs ,指向 GridFS 实例本身
        GridFSDBFile f = (GridFSDBFile)o;
        f._fs = this;
        return f;
    }


_chunkCollection 的相关操作(针对文件数据的操作)

    // 根据指定的 OBjectId 删除文件
    // 需要同时删除文件基本信息和文件数据
    public void remove( ObjectId id ){
        _filesCollection.remove( new BasicDBObject( "_id" , id ) );
        _chunkCollection.remove( new BasicDBObject( "files_id" , id ) );
    }


GridFSDBFile 和 GridFSInputFile 的相关操作


  GridFSDBFile 和 GridFSInputFile 分别表示从数据库中读取的文件和将要保存到数据库中的文件。GridFS 类的部分操作是借助这两个类的实例实现的。

    // 根据特定查询删除文件
    // 调用了 GridFSDBFile.remove 方法
    public void remove( DBObject query ){
        for ( GridFSDBFile f : find( query ) ){
            f.remove();
        }
    }

    // 根据指定名称创建文件
    // 返回的是 GridFSInputFile 类的实例
    // 可以通过 GridFSInputFile 类的实例的 save 方法保存修改
    public GridFSInputFile createFile(String filename) {
        return new GridFSInputFile( this , filename );
    }
1
0
分享到:
评论

相关推荐

    MongoDB Java Driver 源码分析(1):Package 概述

    本篇文章将聚焦于MongoDB Java Driver的源码分析,首先从Package概述的角度进行深入探讨。 MongoDB Java Driver的源码主要分为以下几个核心包: 1. **com.mongodb**: 这是最顶层的包,包含了驱动的核心组件。`...

    MongoDB Java Driver 简单操作

    ### MongoDB Java Driver 简单操作详解 #### 一、简介 MongoDB 是一款非常流行的文档型数据库系统,因其灵活性和高性能而被广泛应用于多种场景之中。为了方便开发者使用 Java 进行开发,MongoDB 提供了官方的 Java ...

    mongoDB java driver api

    11. **连接池**:为了优化性能和资源管理,MongoDB Java驱动支持连接池。你可以配置连接池的大小、超时时间等参数。 12. **安全性**:MongoDB支持身份验证和权限控制,Java驱动API可以进行用户认证,并在连接时指定...

    mongodb-driver-sync-4.2.3-API文档-中英对照版.zip

    标签:mongodb、driver、sync、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...

    mongodb java driver 2.11

    MongoDB Java Driver 2.11是用于与MongoDB数据库进行交互的Java开发库,它提供了丰富的API,使得Java开发者可以方便地在应用程序中存取和管理MongoDB的数据。MongoDB是一款高性能、分布式、文档型的NoSQL数据库,它...

    mongodb-driver-core-4.2.3-API文档-中文版.zip

    标签:mongodb、driver、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    mongodb-driver-sync-4.2.3-API文档-中文版.zip

    标签:mongodb、driver、sync、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件的存取。 首先,我们需要在Java项目中引入MongoDB的驱动库。目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中...

    mongodb java Driver

    MongoDB Java驱动程序是Java开发者用来与MongoDB数据库进行交互的一种关键工具。它提供了一组丰富的API,使得在Java应用程序中执行CRUD(创建、读取、更新、删除)操作变得简单而高效。MongoDB是一个分布式文档存储...

    MongoDBjava各版本驱动下载

    MongoDB Java驱动是Java开发者与MongoDB数据库交互的重要工具,它允许Java应用程序通过标准的Java API来执行查询、插入、更新和删除等操作。在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在...

    mongodb 所需jar包及gridfs java示例代码

    在本主题中,我们将深入探讨MongoDB的Java开发所需jar包以及如何使用GridFS进行文件存储。 首先,MongoDB的Java驱动程序通常包含以下核心jar包: 1. `mongodb-driver.jar`:这是与MongoDB服务器通信的基础库,包含...

    mongodb-async-driver-2.0.1 jar包

    MongoDB异步驱动程序(mongodb-async-driver)是为Java开发者设计的一个库,它允许应用程序以非阻塞的方式与MongoDB服务器进行通信,提高了处理大量并发请求的能力。 在"mongodb-async-driver-2.0.1.jar"这个特定...

    MongoDB系列教程(八):GridFS存储详解

    GridFS 是 MongoDB 提供的一种存储和检索大文件的标准规范。它通过将大文件拆分为多个小块(chunks),然后分别存储这些块,解决了单个文档大小的限制问题。GridFS 主要由两个核心集合组成:`fs.files` 和 `fs....

    MongoDb java driver 3.4.2

    - `mongo-java-driver-3.4.2.jar`:这是核心的MongoDB Java驱动程序库,包含了所有必要的类和方法,用于在Java应用中连接、查询和操作MongoDB数据库。 - `mongo-java-driver-3.4.2-sources.jar`:这个文件包含驱动...

    mongodb-java-driver源码依赖库

    当从远程Maven仓库下载`mongodb-java-driver`的源码依赖时,可能会遇到证书错误,这可能是由于网络问题、过期的SSL证书或者安全策略设置导致的。为了避免这类问题,将依赖库下载到本地`.m2`目录可以确保在后续的开发...

    mongodb-java-driver-4.4.0.jar

    mongodb-java-driver-4.4.0.jar

    MongoDB_3.8.2驱动jar包及其同版本依赖包bson和mongodb-driver-core

    java和mongodb连接,需要mongodb-driver,您还必须下载其依赖项: bson和 mongodb-driver-core》》3个包: mongodb-driver-3.8.2.jar; bson-3.8.2.jar; mongodb-driver-core-3.8.2.jar

    Java连接mongoDB需要的jar包(3.9.1)

    2. `mongodb-driver-3.9.1.jar`: 这是MongoDB Java驱动的主要部分,提供了与MongoDB服务器通信所需的类和接口。它实现了连接管理、命令执行、查询和写入操作等功能。开发者可以使用这个库来创建MongoClient实例,...

    mongodb driver for java 源码

    以下是对MongoDB Java驱动2.5.3版本源码的一些关键知识点的详细解释: 1. **连接管理**: - `MongoClient`类是与MongoDB建立连接的主要入口点。它负责创建和管理`MongoServerAddress`对象,这些对象表示到MongoDB...

Global site tag (gtag.js) - Google Analytics