MongoDB学习笔记之GridFS使用介绍

MongoDB学习笔记之GridFS使用介绍

什么是GridFS

GridFS 是 MongoDB 提供的一种协议,用于存储可扩展的大型二进制数据文件,例如图像、音频和视频文件。MongoDB 的文件系统使用两个集合来存储二进制文件,使之可以分批读取或者分片存储。

如何使用GridFS

  1. 创建GridFS对象

创建GridFSBucket对象时,必须指定数据库名称和集合名称,例如:

const { MongoClient } = require('mongodb');
const { GridFSBucket } = require('mongodb');

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

        const database = client.db('<database name>');
        const bucket = new GridFSBucket(database, { bucketName: '<bucket name>' });

    } catch (err) {
        console.log(err.stack);
    }

    // Close the connection to the MongoDB server
    await client.close();
}

run().catch(console.dir);

在该示例中,<username><password><database name><bucket name> 需要替换为实际值。

  1. 存储文件

使用openUploadStream方法上传文件,例如:

const { ObjectId } = require('mongodb');
const fs = require('fs');

// An error will be thrown if the file does not exist
const readableStream = fs.createReadStream('<path to file>');
const uploadStream = bucket.openUploadStream('<filename>');

// Store custom metadata with the file
const metadata = { owner: "username", readPrivilege: true };
uploadStream.on('finish', function() {
    console.log('File uploaded!')
    console.log(`File ID: ${uploadStream.id}`);
});

// Pipe the file data to the GridFS file object
readableStream.pipe(uploadStream);

在该示例中,<path to file><filename> 需要替换为实际值。上传文件时可以选择存储自定义的文件元数据(例如上传者信息等)。

  1. 下载文件

使用openDownloadStream方法下载文件,例如:

const downloadStream = bucket.openDownloadStream(ObjectId('<file ID>'));

// Pipe the file data to the response object
downloadStream.pipe(response);

在该示例中,<file ID> 需要替换为实际值。下载文件时可以将文件数据直接发送到响应对象,以便实现断点续传等功能。

示例说明

  1. 上传文件
const { MongoClient } = require('mongodb');
const { GridFSBucket } = require('mongodb');
const fs = require('fs');

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

        const database = client.db('<database name>');
        const bucket = new GridFSBucket(database, { bucketName: '<bucket name>' });

        const readableStream = fs.createReadStream('<path to file>');
        const uploadStream = bucket.openUploadStream('<filename>');

        const metadata = { owner: "username", readPrivilege: true };
        uploadStream.on('finish', function() {
            console.log('File uploaded!')
            console.log(`File ID: ${uploadStream.id}`);
        });

        readableStream.pipe(uploadStream);

    } catch (err) {
        console.log(err.stack);
    }

    await client.close();
}

run().catch(console.dir);

在该示例中,替换 <username><password><database name><bucket name><path to file><filename> 为实际值。运行该脚本后,将会上传指定路径下的文件到 GridFS,并打印出文件 ID。

  1. 下载文件
const { MongoClient } = require('mongodb');
const { GridFSBucket } = require('mongodb');
const fs = require('fs');

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

        const database = client.db('<database name>');
        const bucket = new GridFSBucket(database, { bucketName: '<bucket name>' });

        const downloadStream = bucket.openDownloadStream(ObjectId('<file ID>'));

        downloadStream.pipe(fs.createWriteStream('<path to output>'));

    } catch (err) {
        console.log(err.stack);
    }

    await client.close();
}

run().catch(console.dir);

在该示例中,替换 <username><password><database name><bucket name><file ID><path to output> 为实际值。运行该脚本后,将会下载指定 ID 的文件,并保存到指定路径下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MongoDB学习笔记之GridFS使用介绍 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 在lnmp环境中的nginx编译安装

    在 LNMP 环境中安装 Nginx 的步骤大概如下: 1. 安装编译工具 在 Linux 中编译 Nginx 需要用到一些编译工具,比如 gcc、make 等,可以通过以下命令安装: yum -y install gcc make pcre pcre-devel zlib zlib-devel openssl openssl-devel 2. 下载并解压 …

    人工智能概览 2023年5月25日
    00
  • django中使用memcached示例详解

    这里是一份“django中使用memcached示例详解”的攻略。 什么是Memcached Memcached是一种分布式内存缓存系统,用于缓存数据和对象。它通常被用来加速动态Web应用程序,减少数据库负载和提高网站的响应时间。Memcached可以被应用于许多编程语言和Web应用程序框架中,包括Django。 Django中使用Memcached Dja…

    人工智能概览 2023年5月25日
    00
  • MongoDB分片键的选择和案例实例详解

    关于”MongoDB分片键的选择和案例实例详解”的攻略,我可以提供以下内容: 1. 什么是MongoDB分片键? MongoDB分片是一种横向扩展的方式,一般通过分片键来进行数据划分和分布式存储。分片键是用于划分数据和分发到不同的Shard节点上的字段或字段组合。MongoDB中允许指定多个分片键来构建复合分片键。 2. MongoDB分片键的选择 在选择M…

    人工智能概论 2023年5月25日
    00
  • pytorch使用nn.Moudle实现逻辑回归

    下面是使用PyTorch的nn.Module实现逻辑回归的完整攻略。 1. 准备数据 首先,我们需要准备要使用的数据集。假设我们使用的是一个二分类的问题,数据集中包含两种样本,每个样本有两个特征。我们可以通过以下代码生成一个包含100个样本的数据集: import torch from sklearn.datasets import make_classif…

    人工智能概论 2023年5月25日
    00
  • SpringBoot 使用Mongo的GridFs实现分布式文件存储操作

    准备工作 在pom.xml文件中引入相应依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </depend…

    人工智能概览 2023年5月25日
    00
  • MongoDB操作符中的$elemMatch问题

    MongoDB中的$elemMatch操作符用于查询嵌套的数组,可以在查询时对数组元素的内容进行筛选,较为灵活实用。下面介绍一下关于$elemMatch的使用方法、性能优化和注意事项。 使用方法 基本语法 $elemMatch是MongoDB的一个查询操作符,可以在查询语句中使用,语法如下: { <field>: { $elemMatch: { …

    人工智能概论 2023年5月25日
    00
  • 在Perl中使用Getopt::Long模块来接收用户命令行参数

    要在Perl中从命令行接收用户输入的参数,可以使用Getopt::Long模块。该模块可以轻松地解析命令行参数并为其提供选项值。下面是使用Getopt::Long模块来接收用户命令行参数的完整攻略。 安装Getopt::Long模块 首先需要确保已安装了Perl,然后可以使用CPAN模块来安装Getopt::Long模块。可以在终端或命令行窗口中输入以下命令…

    人工智能概论 2023年5月25日
    00
  • 详解docker-compose.yml文件常用模版命令

    下面是关于docker-compose.yml文件常用模板命令的详解攻略。 什么是docker-compose.yml文件? docker-compose.yml文件是Docker Compose工具的核心配置文件,由YAML语言编写。它可以定义一组关联的Docker容器,组合它们为一个应用,并对它们进行管理。 常用模板命令 version 该命令指定doc…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部