首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查询MongoDB GridFS元数据(Java)

MongoDB GridFS 是 MongoDB 的一个组件,用于存储大型文件,如图像、音频和视频文件。它的主要特点是可以在客户端进行读取和写入操作,并且支持元数据查询。

GridFS 的元数据包括文件名和文件大小等基本信息,也包括了文件分块和分块偏移量等高级信息。这些信息可以在客户端通过 MongoDB 的驱动程序或命令行工具进行查询。

以下是查询 MongoDB GridFS 元数据(Java)的代码示例:

代码语言:java
复制
import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Filters;

import java.util.Arrays;

import static com.mongodb.client.model.Filters.eq;

// ...
public class GridFSMetadataExample {
    public static void main(String[] args) {
        String connectionString = "mongodb+srv://username:password@cluster0.mongodb.net/test?retryWrites=true&w=majority";
        MongoClient mongoClient = new MongoClient(new MongoClientURI(connectionString));
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> gridFS = database.getCollection("gridfs");

        // 查询所有文件
        Aggregates.match(new Document("files", new Document("$exists", true)));
        Aggregates.project(new Document("_id", 1)
                .append("filename", 1)
                .append("filesize", 1)
                .append("uploadDate", 1));
        Aggregates.unwind("$files");

        gridFS.aggregate(Arrays.asList(Aggregates.project(new Document("file", "$files.file"))));

        // 查询文件元数据
        Bson match = Aggregates.match(new Document("files", new Document("$exists", true)));
        Bson unwind = Aggregates.unwind("$files");
        Bson project = Aggregates.project(new Document("_id", 1)
                .append("filename", 1)
                .append("filesize", 1)
                .append("uploadDate", 1));

        Document result = gridFS.aggregate(Arrays.asList(match, unwind, project)).get(0);
        System.out.println(result.toJson());

        mongoClient.close();
    }
}

这个示例查询了所有文件,并返回了每个文件的元数据,包括文件名、文件大小和上传日期。请注意,这个示例使用了 MongoDB 的 Aggregates 操作,这是一种非常强大的操作,可以处理各种复杂的查询和聚合需求。

希望这个回答对您有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

技术干货| 如何在MongoDB中轻松使用GridFS

同样,最后的那个块也不会大于默认的块大小,仅使用所需的空间以及一些其他数据GridFS使用两个集合来存储文件。一个集合存储文件块,另一个集合存储文件数据。 ...GridFS集合一节详细介绍了每个集合。 当你从GridFS查询文件时,驱动程序将根据需要重新组装该文件所有的块。你可以对GridFS存储的文件进行范围查询。...当你希望保持文件和数据在多个系统和设施之间自动同步和部署时,可以使用GridFS。使用地理分布的复制集时,MongoDB可以自动将文件及其数据分发到多个mongod实例和设施。...数据字段可以是任何数据类型,并且可以保存您要存储的任何其他信息。如果希望将其他任意字段添加到文件集合中的文档,请将其添加到数据字段中的对象。...原文链接: https://github.com/mongodb-china/MongoDB-CN-Manual/blob/master/cun-chu/gridfs.md 关于作者:张琦 Java 开发工程师

6.6K30
  • MongoDB GridFS

    MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。...当你想让你的文件和数据自动同步并部署在多个系统和设施,你可以使用GridFS 实现分布式文件存储。 存储原理 GridFS 使用两个集合(collection)存储文件。...一个集合是 chunks, 用于存储文件内容的二进制数据;一个集合是 files,用于存储文件的数据。...最后根据“n”字段顺序读取 chunk 的“data”字段数据,还原文件。 fs.files 集合存储文件的数据,以类 json 格式文档形式存储。...API MongoDB 支持多种编程语言驱动,比如 c、java、python、C#、nodeJs 等。

    6810

    MongoDB GridFS 怎么用

    MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。...GridFSMongoDB提供的二进制数据存储在数据库中的解决方案,对于 MongoDB 的BSON 格式的数据(文档)存储有尺寸限制,最大为 16M。...当你想让你的文件和数据自动同步并部署在多个系统和设施,你可以使用GridFS 实现分布式文件存储。...一个集合是 chunks, 用于存储文件内容的二进制数据;一个集合是 files,用于存储文件的数据。...使用 MongoDB 提供的 API MongoDB 支持多种编程语言驱动,比如 c、java、C#、nodeJs 等。因此可以使用这些语言 MongoDB 驱动 API 操作,扩展 GridFS

    4.3K20

    SpringBoot学习笔记(十一:使用MongoDB存储文件 )

    一个集合是chunks, 用于存储文件内容的二进制数据;一个集合是files,用于存储文件的数据GridFS会将两个集合放在一个普通的buket中,并且这两个集合使用buket的名字作为前缀。...最后根据“n”字段顺序读取chunk的“data”字段数据,还原文件。 GridFS存储过程 ? fs.files 集合存储文件的数据,以类json格式文档形式存储。...在filetest数据库中就会多出2个集合,它们存储了GridFS文件系统的所有文件信息,查询这两个集合就能看到上传的文件的一些信息: ?...比如c、java、C#、nodeJs等。因此可以使用这些语言MongoDB驱动API操作,扩展GridFS。...【5】:java文件转二进制 【6】:Java将文件转为字节数组 【7】:java文件下载的几种方式 【8】:文件和byte数组之间相互转换 【9】:关于知名数据MongoDB,有个功能你不可不知

    3.3K41

    基于MongoDB GridFS的图片存储

    它是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件.并且支持分布式应用(文件分布存储和读取).GridFSmongodb中用户存储大对象的工具,对于mongodb,BSON....files集合中的文档就是BSON格式,可以使用mongodb的索引等等特性,当然可以对files文档做数据分析。...使用场景:如果你的系统有如下情景 1) 有大量的上传图片(用户上传或者系统本身的文件发布等) 2) 文件的量级处于飞速增长,有可能打到单机操作系统自己的文件系统的查询性能瓶颈,甚至超过单机硬盘的扩容范围.... 3) 文件的备份(不适用gridfs这种三方也可以做,但是不尽方便),文件系统访问的故障转移和修复.. 4) 文件的索引,存储除文件本身以外还需要关联更多的数据信息(比如,不仅仅存储文件,还要保存一些文件的发布式作者...亿级数据量的性能测试 MongoDB资料汇总专题 http://www.oschina.net/question/12_29127 基于MongoDB GridFS的图片存储 基于MongoDB GridFS

    3.1K102

    MONGODB GridFS 存储文件 与 文件系统存储,你有何优势让我放弃文件系统?

    正文 ——————————————————————————————— 数据库中大部分都不建议存储较大的文件到数据库中,而在MONGODB 数据库中有一种方式可以存储较大的文件,这种文件的格式叫做GridFS...类似地,不大于块大小的文件只有最后一个块,只使用所需的空间和一些额外的数据。...本身MONGODBGridfs是通过两个文件来进行存储数据的, 而Gridfs 和文档存储最大的区别在于,对于内存的消耗,如果是文档方式存储,则数据需要他通过内存来进行输出,而如果采用gridfs的方式来存储数据...作为替代方法,您可以存储每个文件的多个版本,并在数据中指定文件的当前版本。您可以在上传文件的新版本后,在原子更新中更新指示“最新”状态的数据字段,然后根据需要删除以前的版本。...现实中如果不使用python,在外部进行mongodb 的文件操作则可以使用 mongofiles 对MONGNODB 的存储文件进行简单的查询数据的处理 ?

    3.3K30

    mongodb百亿数据存储(mysql数据库并发量)

    GridFS使用两个数据结构来存储数据:files(包含数据对象)、chunks(包含其他一些相关信息的二进制块)。...GridFSJava、C#、Perl、PHP、Python、Ruby等程序言语均支持,且提供了良好的API接口。...3.2 基于GridFS的海量数据存储测试 本文主要采用MongoDB最新版2.0及官方提供的C#语言驱动进行测试,C#驱动下载地址:https://github.com/mongodb/Mongo-csharp-driver...(3)Route Process:这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个shard上查询或保存记录,再连接相应的shard进行操作,最后将结果返回给客户端,而这一切对客户端是透明的...图5 GridFS大容量文件测试结果 图6 GridFS大容量文件分片信息 4 结论 随着企业和个人数据的不断扩大,随着云计算的高速发展,越来越多的应用需要存储海量数据,并且对高并发和处理海量数据提出了更高的要求

    3.9K50

    MongodbGFS存储大文件(java版)

    Mongodb 是一个开源的no-sql分布式数据库,Mongodb也为我们提供了基于文件的GFS分布式存储系统。因此利用Mongodb我们完全可以实现一个分布式的文件存储以及管理。...下面的内容主要为大家介绍,如何利用java,将大文件存入Mongodb数据库中。我们这里所说的大文件,是指大小在16M以上的文件,这也符合MongodbGFS的说明。...从上面这段话可以简单的了解到,mongodb是将文件进行分块,存储,当查询时,mongodb会帮你把你所需要的块进行组合然后展示给你,因此结合mongodb分布式的特性,我们可以轻易的构建一个分布式的文件存储...在利用java驱动存储时,当我们获得需要存储的数据库连接之后,我们需要先创建一个bucket,官方的说明如下: Create a GridFS Bucket GridFS stores files...; import com.mongodb.client.gridfs.GridFSBuckets; import com.mongodb.client.gridfs.GridFSUploadStream

    1.9K10

    mongodb 内存引擎及配置

    中的另外一个引擎,内存引擎 内存引擎 内存引擎,看名字就知道,数据肯定不是存在磁盘里面的,而是存在内存里面的 mongodb 的内存引擎是 InMemory 存储引擎,主要是用在企业版本的 mongodb...存储非持久的数据 应用程序数据和系统数据,例如用户,权限,索引,副本集配置,分片群集配置等等 用于高性能的读取 用于在副本集中的用来提供高性能查询的次要节点,可以从其他节点恢复数据,因此 内存引擎是不适用于副本集的主节点的...GridFS 用作做大文件存储 我们在工作工程中,会使用 GridFS 存储大于16 MB的文件,GridFS 是用于存储和检索超过16 MB 的 BSON文档,如果一般数据量比较小的话,其实也用不到...GridFS GridFS 不支持多文档事务 GridFS 文件存储不是只存储在单个文档中的 mongodb 中, GridFS 是不会将文件存储在单个文档中的,而是多个文档 例如将文件分为多个部分或大块...(默认是 255 kB),并将每个大块存储为单独的文档 在 mongodb 中,GridFS 是使用这俩集合来存储文件块的,也就是存储文件的数据 fs.chunks fs.files 今天就到这里,学习所得

    1K50

    MongoDB干货篇之查询数据

    MongoDB干货篇之查询 1.1. 准备工作 1.2. find() 1.2.1. 实例: 1.3. 查询内嵌文档 1.3.1. 完全匹配查询 1.3.2. 键值对查询 1.4....迭代游标的查询 MongoDB干货篇之查询 准备工作 在开始之前我们应该先准备数据方便演示,这里我插入的了几条数据数据如下: db.user.insertMany( [{ name:'jack',...查询内嵌文档 上述例子中插入的school数据就表示内嵌文档 完全匹配查询 完全匹配查询表示school中的查询数组必须和插入的数组完全一样,顺序都必须一样才能查找出来 db.user.find...可以通过键值对查询,不用考虑顺序,比如'school.name':'shida',表示查询学校名字为shida的数据,这里的引号是必须要的 db.user.find({'school.name':'...学过高级语言的朋友都知道迭代的问题,像java,下面使用迭代的方法查询 var cursor=db.usr.find(); //这里使用迭代输出所有的数据 while(cursor.hasNext

    1.3K20

    一年经验Java开发0713面试

    我们的文件是存储在MongoDB中的。 MongoDB单个文档的存储限制是16M,如果要存储大于16M的文件,就要用到MongoDB GridFS。...GridFS是Mongo的一个子模块,使用GridFS可以基于MongoDB来持久存储文件。并且支持分布式应用(文件分布存储和读取)。...作为MongoDB中二进制数据存储在数据库中的解决方案,通常用来处理大文件。 GridFS使用两个集合(collection)存储文件。...一个集合是chunks, 用于存储文件内容的二进制数据;一个集合是files,用于存储文件的数据GridFS会将两个集合放在一个普通的buket中,并且这两个集合使用buket的名字作为前缀。...exists或者关联查询语句替代 4、or 的查询尽量用 union或者union all 代替(在确认没有重复数据或者不用剔除重复数据时,union all会更好) 5、应尽量避免在 where 子句中使用

    70530

    MongoDB 中的集合和数据

    集合 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。...集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。...MongoDB 的操作日志文件 oplog.rs 就是利用 Capped Collection 来实现的。...在32bit机器中,capped collection 最大存储为 1e9( 1X10的9次方)个字节 数据 数据库的信息是存储在集合中。....* 在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection),如下: 集合命名空间 描述 dbname.system.namespaces 列出所有名字空间

    1.9K30

    MongoDB(三)——CRUD

    MongoDB作为非关系型数据库。还是传统数据库的增删改查有很大的差别的。这里仅仅是将知识点进行了一下提纲挈领,实际用的时候。我们百度一下具体使用方法就可以。 先看大的几个方面: 一。...先来看一下更新,经常使用操作还是很实用的,须要我们依据实际情况灵活运用,这里仅仅是提出了知识点,须要百度出样例来学习使用: 2,查询也是一样,看一下知识点的汇总。事实上用几个。...特点:对固定集合进行插入速度极快;依照插入顺序的查询输出速度极快;能够在插入最新数据时,淘汰最早数据。 使用方法:存储日志信息,最适合只是。...): GridFS是一种在MongoDB中存储大二进制文件的机制。...GridFS使用两个表存储数据,默认fs.files:包括数据对象。fs.chunks包括文件相关信息的二进制块。

    50840

    数据MongoDB-聚合查询

    MongoDB 聚合查询MongoDB中我们可以通过aggregate()函数来完成一些聚合查询,aggregate()函数主要用于处理诸如统计,平均值,求和等,并返回计算后的数据结果。...,别名:{聚合运算:"$运算列"}}},{条件筛选:{键名:{运算条件:运算值}}}]) 常见的mongo的聚合操作和mysql的查询做类比 求和 - $sum 查询dev集合中一共有多少个文档。...aggregate([{$group:{_id:"$name",avgAge:{$avg:"$age"}}}]); 统计结果返回数组 - $push 分组后按照分组数组进行合并,如果希望看到某个列合并之前的所有数据可以使用...$push,把分组后同一组的所有值放到一个数组中 按照name进行分组,分组后把age的数据都放入到名称为allAge的数组中 db.c1.aggregate([{$group:{_id:"$name"...如果这个数组属性为空,对应document将不被显示(因为document没有数组属性) 正常数据:只有name为abc的hobby有数组类型值,且长度为3 执行下面命令后的效果 db.c1.aggregate

    7.5K20

    数据MongoDB-聚合查询

    MongoDB 聚合查询MongoDB中我们可以通过aggregate()函数来完成一些聚合查询,aggregate()函数主要用于处理诸如统计,平均值,求和等,并返回计算后的数据结果。...,别名:{聚合运算:"$运算列"}}},{条件筛选:{键名:{运算条件:运算值}}}]) 常见的mongo的聚合操作和mysql的查询做类比 求和 - $sum 查询dev集合中一共有多少个文档。...aggregate([{$group:{_id:"$name",avgAge:{$avg:"$age"}}}]); 统计结果返回数组 - $push 分组后按照分组数组进行合并,如果希望看到某个列合并之前的所有数据可以使用...$push,把分组后同一组的所有值放到一个数组中 按照name进行分组,分组后把age的数据都放入到名称为allAge的数组中 db.c1.aggregate([{$group:{_id:"$name"...如果这个数组属性为空,对应document将不被显示(因为document没有数组属性) 正常数据:只有name为abc的hobby有数组类型值,且长度为3 ? 执行下面命令后的效果 ?

    7.9K20
    领券