⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

混合存储策略:将超大JSON嵌入文档与GridFS分桶自动转换

基于文档大小阈值自动路由:小数据存内嵌数组,大数据存GridFS并保留引用指针 · 难度:入门 · +10XP

混合存储策略:将超大JSON嵌入文档与GridFS分桶自动转换

BSON 文档有16MB限制,很多教程只建议用GridFS。本教程提出一种自适应策略:写操作前通过预聚合估算文档大小,若超过阈值则自动将部分字段提取到GridFS,原文档保留 fs_id 引用。读取时通过聚合管道的 $lookup + $unionWith 透明重组。这样既享受内嵌数组的读取性能,又突破大小限制,适合发票附件或日志正文等场景。

const MAX_BSON = 10 * 1024 * 1024; // 10MB
async function smartInsert(order) {
  const size = Object.bsonsize(order);
  if (size < MAX_BSON) {
    return db.orders.insertOne(order);
  }
  const bucket = new GridFSBucket(db, { bucketName: 'big_fields' });
  const uploadStream = bucket.openUploadStream(order._id.toString());
  uploadStream.write(JSON.stringify(order.attachments));
  uploadStream.end();
  delete order.attachments;
  order.gridFsId = uploadStream.id;
  return db.orders.insertOne(order);
}
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 83 篇
0 完成
🔥 0