You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB容器初始化脚本(mongosh执行)中读取文件并插入数据?

如何在mongosh脚本中读取本地文件并插入MongoDB(Docker初始化场景)

要实现Docker容器首次启动时自动读取磁盘文件并插入MongoDB,你可以用mongosh内置的原生函数替代NodeJS的fs模块,以下是纯mongosh可执行的脚本实现:

文本文件处理

如果读取的是文本文件,直接用cat()读取内容后转Base64:

// 指定文件路径
const filePath = "/path/to/somefile.txt";
// 读取文本文件内容
const fileContent = cat(filePath);
// 转为Base64编码
const base64Data = btoa(fileContent);

// 插入到集合中,使用BSON Binary类型存储
db.example.files.insertOne({
  filename: "somefile.txt",
  data: BinData(0, base64Data)
});

二进制文件处理

如果是图片、压缩包这类二进制文件,需要以原始模式读取:

const filePath = "/path/to/binaryfile.png";
// 以原始二进制模式读取,返回Uint8Array
const rawBytes = cat("--raw", filePath);
// 将二进制字节转成可编码的字符串,再转Base64
const base64Data = btoa(String.fromCharCode(...rawBytes));

db.example.files.insertOne({
  filename: "binaryfile.png",
  data: BinData(0, base64Data)
});

关键说明

  • cat():mongosh内置的文件读取函数,不加参数读取文本,--raw参数读取原始二进制数据
  • btoa():mongosh内置的Base64编码函数,用于将字符串转为Base64格式
  • BinData(subtype, base64):mongosh中创建BSON Binary类型的方法,0代表通用二进制子类型,和NodeJS的Binary.createFromBase64行为一致

Docker场景注意事项

  • 将脚本命名为init.js并放在容器的/docker-entrypoint-initdb.d/目录下,MongoDB容器首次启动时会自动执行
  • 确保目标文件已通过Docker卷挂载或COPY指令复制到容器内的指定路径
  • 保证MongoDB运行用户(默认mongodb)对目标文件有读取权限

内容的提问来源于stack exchange,提问作者Josh M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:24:57