MongoDB 教程:如何使用 GridFS 存储文件

阅读时长 5 分钟读完

MongoDB是一种非关系型数据库,它以JSON格式存储数据。GridFS是MongoDB的一个文件存储工具,它允许我们将大文件(大于16MB)分割成多个小部分进行存储,同时还提供了常规文件存储与查询的灵活性。本文将分享如何使用GridFS在MongoDB中存储大文件。

如何使用 MongoDB 存储文件?

我们可以使用MongoDB普通的文档存储来存储小型数据,但是如果需要存储大文件,我们需要使用GridFS。GridFS使用两个文档来存储文件:一个存储文件的元数据,另一个存储文件的二进制数据。

GridFS 的元数据文档

在 GridFS 中,我们使用一个元数据文档来存储文件的相关信息,主要包括文件名、文件大小、上传时间等,GridFS会自动创建和处理这些数据。

以下是GridFS元数据文档的一些常见字段:

  • _id: 文件的唯一ID
  • filename: 文件名
  • chunkSize: 文件分块大小,默认值为255KB
  • length: 文件大小
  • uploadDate: 文件上传时间
  • contentType: 文件内容类型
  • aliases: 文件的别名

GridFS 的存储方式

GridFS将文件分成多个块存储。每个块的默认大小为255KB,但可以通过指定块大小的方式更改。GridFS会将每个块存储在一个单独的文档中。为便于存储和查询,GridFS将文件的数据块存储在称为chunks的集合中,而在元数据文档中存储相应的信息。

以下是GridFS数据块文档的一些常见字段:

  • _id: 数据块唯一ID
  • files_id: 文件的_id
  • n: 数据块序号
  • data: 数据块的二进制内容

GridFS 的存储和查询示例

现在我们将使用Node.js和原生MongoDB驱动程序来演示使用GridFS存储和查询文件的过程。首先,确保已安装MongoDB和Node.js。

存储文件

-- -------------------- ---- -------
----- ----------- - -------------------------------
----- ------ - ------------------
----- -- - --------------

----- --- - -----------------------------
----- ------ - ------------

----- ------ - --- -----------------
----------------------- ----- -
    ------------------ -----
    ---------------------- ------------ -- ---------
    ----- -- - ------------------

    -- -- ---- ------ -----
    ----- -------- - ----------------------
    ----- ---------- - ------------------------------

    -- ------ ------ ---
    ----- ------------ - --- -------------------------
    ----- ------------ - --------------------------------------------

    -- ------- ------ ----
    ------------------------------
    ------------------------- -------- -- -
        ----------------- ----- -- -----------
        ---------------
    ---
---

以上代码将文件流的数据传输到GridFS流中。一旦所有数据被写入流中,需要使用GridFS的'test'方法来确认文件已存储到MongoDB的GridFS中。

查询文件

-- -------------------- ---- -------
----- ----------- - -------------------------------
----- ------ - ------------------
----- -- - --------------

----- --- - -----------------------------
----- ------ - ------------

----- ------ - --- -----------------
----------------------- ----- -
    ------------------ -----
    ---------------------- ------------ -- ---------
    ----- -- - ------------------
    ----- ------------ - --- -------------------------

    -- ------------------
    ----- ------ - --- ---------------------------------------------
    ----- -------------- - ----------------------------------------
    ----- ----------- - --------------------------------------------
    ---------------------------------
    ------------------------ -------- -- -
        ----------------- ---------- ---- -----------
        ---------------
    ---
---

以上代码将数据块流转化为真正的文件。在查询GridFS文件时,需要提供GridFS存储的_id以确定文件。

总结

GridFS是MongoDB的一个非常实用的工具,可以被用来存储大数据。由于其灵活性和可扩展性,GridFS已经成为后端和前端开发人员的重要工具之一。在我们以上的例子中,我们使用Node.js和MongoDB原生驱动程序来演示如何使用GridFS存储和查询文件,其中详细讲解了GridFS中元数据文档和数据块文档的字段信息,希望你对GridFS有了更深层次的了解。

如果你想了解更多MongoDB的知识,可以参考MongoDB的官方文档。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647701a1968c7c53b0395bed

纠错
反馈