Skip to content

MongoDB GridFS

什么是 GridFS?

GridFS 是 MongoDB 的一种规范,用于在集合中存储超过 16MB(BSON 文档大小限制)的文件。文件被切分为多个(chunk),元数据与块分别存在两个集合中。

两个集合

  • fs.files:存储文件名、长度、上传时间、MD5、自定义元数据等。
  • fs.chunks:存储文件块,每块默认 255KB,包含 files_id 引用与块序号。

使用场景

  • 大文件(图片、视频、备份等)存进 MongoDB。
  • 需要与业务数据同一存储、同一备份与权限时。

命令行示例(mongosh)

javascript
// 需通过驱动或 mongofiles 操作,mongosh 不直接提供 GridFS API
// 以下为概念示例
// 上传:mongofiles -d mydb put myfile.pdf
// 下载:mongofiles -d mydb get myfile.pdf
// 列表:mongofiles -d mydb list

在驱动中使用(Node.js 示例)

javascript
const bucket = new MongoClient(uri).db("mydb").bucket();
const stream = bucket.openUploadStream("myfile.pdf");
fs.createReadStream("./myfile.pdf").pipe(stream);
// 下载:bucket.openDownloadStreamByName("myfile.pdf")

各语言驱动均提供 GridFS API,见官方文档。下一节介绍 MongoDB 固定集合