MongoDB GridFS文件存储
使用GridFS存储和检索大文件,突破BSON文档16MB限制。 · 难度:入门 · +15XP
GridFS 文件系统
GridFS 是 MongoDB 的规范,用于存储超过 16MB 的文件。它将文件分割成多个 255KB 的块(chunks),并存储在两个集合中:fs.files(元数据)和 fs.chunks(块数据)。
何时使用 GridFS
- 文件大于 16MB
- 需要随机访问文件部分内容
- 文件自动备份与复制
使用 Mongoose 操作 GridFS
const mongoose = require('mongoose');
const Grid = require('gridfs-stream');
const conn = mongoose.connection;
let gfs;
conn.once('open', () => {
gfs = Grid(conn.db, mongoose.mongo);
});
// 写入文件
const writestream = gfs.createWriteStream({ filename: 'photo.jpg' });
fs.createReadStream('./photo.jpg').pipe(writestream);
// 读取文件
const readstream = gfs.createReadStream({ filename: 'photo.jpg' });
readstream.pipe(res);表格:GridFS 集合字段
| 集合 | 字段 | 说明 |
|---|---|---|
| fs.files | _id, filename, contentType, length, uploadDate | 文件元数据 |
| fs.chunks | _id, files_id, n, data | 文件块数据(二进制) |
练习提示: 使用 GridFS 上传一个文本文件,然后通过 find 查询 fs.files 查看元数据,最后下载并验证内容。