目录
- 什么是 GridFS
- GridFS 的工作原理
- GridFS 的数据结构
- 使用场景与优势
- 常见操作示例(以 MongoDB Shell 为例)
- 在编程语言中使用 GridFS(Node.js、Python 等)
- 参考资料
什么是 GridFS
GridFS 是 MongoDB 提供的一种用于存储和检索大型文件的机制,它打破了 BSON 文档最大限制(16MB),将文件分割为多个数据块(chunk)后分别存储。它非常适合存储音频、视频、图片、PDF 等大型文件。
GridFS 的工作原理
GridFS 使用两个主要集合来实现文件的分块管理:
fs.files
:保存文件的元信息,例如文件名、长度、上传时间、MIME 类型等。fs.chunks
:保存实际的文件内容,每个文档代表文件的一部分(chunk)。
文件上传后,MongoDB 会自动将文件拆分为多个 chunk(默认每块 255KB),并将这些块存入 fs.chunks
中,同时在 fs.files
中记录索引信息。
GridFS 的数据结构
fs.files
示例:
{
"_id": ObjectId("5e8c1ec6"),
"filename": "example.pdf",
"length": 892345,
"chunkSize": 261120,
"uploadDate": ISODate("2025-04-12T10:15:00Z"),
"md5": "abc123...",
"contentType": "application/pdf"
}
fs.chunks
示例:
{
"_id": ObjectId("5e8c1ec8"),
"files_id": ObjectId("5e8c1ec6"),
"n": 0,
"data": BinData(...)
}
files_id
关联fs.files
中的_id
n
表示块的序号data
为二进制数据
使用场景与优势
场景
- 在线文件存储系统(类似 Google Drive、百度网盘)
- 需要与文档数据库紧密集成的多媒体内容平台
- 存储日志文件、数据库快照、导出数据等
优势
- 文件数据与元信息同存于 MongoDB,无需外部文件系统
- 轻松实现备份、复制、分片
- 支持流式读取与写入,节省内存
常见操作示例(以 MongoDB Shell 为例)
上传文件
mongofiles -d gridfs_test put example.jpg
下载文件
mongofiles -d gridfs_test get example.jpg
删除文件
mongofiles -d gridfs_test delete example.jpg
注意:mongofiles
是 MongoDB 自带的命令行工具,需在终端使用。
在编程语言中使用 GridFS(Node.js、Python 等)
Node.js 示例(使用官方 MongoDB Driver)
const { MongoClient, GridFSBucket } = require('mongodb');
const fs = require('fs');
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const db = client.db('gridfs_test');
const bucket = new GridFSBucket(db);
fs.createReadStream('./sample.pdf')
.pipe(bucket.openUploadStream('sample.pdf'))
.on('finish', () => {
console.log('文件已上传');
client.close();
});
Python 示例(使用 pymongo 和 gridfs 模块)
from pymongo import MongoClient
import gridfs
client = MongoClient('mongodb://localhost:27017')
db = client['gridfs_test']
fs = gridfs.GridFS(db)
with open('example.jpg', 'rb') as f:
file_id = fs.put(f, filename="example.jpg")
print("文件已上传,ID 为:", file_id)
参考资料
- MongoDB 官方文档 – GridFS: https://www.mongodb.com/docs/manual/core/gridfs/
- Node.js MongoDB Driver – GridFS: https://mongodb.github.io/node-mongodb-native/4.1/tutorials/gridfs/
- pymongo GridFS: https://pymongo.readthedocs.io/en/stable/api/gridfs/
更多 MongoDB 教程和使用案例,请访问:www.52kanjuqing.com(仅此一次出现)。
发表回复