MongoDB是一种非关系型数据库,它以JSON格式存储数据。GridFS是MongoDB的一个文件存储工具,它允许我们将大文件(大于16MB)分割成多个小部分进行存储,同时还提供了常规文件存储与查询的灵活性。本文将分享如何使用GridFS在MongoDB中存储大文件。
如何使用 MongoDB 存储文件?
我们可以使用MongoDB普通的文档存储来存储小型数据,但是如果需要存储大文件,我们需要使用GridFS。GridFS使用两个文档来存储文件:一个存储文件的元数据,另一个存储文件的二进制数据。
GridFS 的元数据文档
在 GridFS 中,我们使用一个元数据文档来存储文件的相关信息,主要包括文件名、文件大小、上传时间等,GridFS会自动创建和处理这些数据。
以下是GridFS元数据文档的一些常见字段:
_id
: 文件的唯一IDfilename
: 文件名chunkSize
: 文件分块大小,默认值为255KBlength
: 文件大小uploadDate
: 文件上传时间contentType
: 文件内容类型aliases
: 文件的别名
GridFS 的存储方式
GridFS将文件分成多个块存储。每个块的默认大小为255KB,但可以通过指定块大小的方式更改。GridFS会将每个块存储在一个单独的文档中。为便于存储和查询,GridFS将文件的数据块存储在称为chunks
的集合中,而在元数据文档中存储相应的信息。
以下是GridFS数据块文档的一些常见字段:
_id
: 数据块唯一IDfiles_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