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

如何在docker-compose中通过init-db.js为MongoDB加载远程CSV数据

错误原因

你遇到的require未定义报错,是因为Mongo官方镜像中/docker-entrypoint-initdb.d/目录下的JS脚本是由Mongo Shell(mongosh)执行的,它不是Node.js运行环境,不支持CommonJS的require语法,也没有Node生态的第三方包,所以你参考的Node.js CSV解析代码完全无法在这个场景下运行。


方案1:使用Shell脚本 + mongoimport 完成导入(推荐)

官方Mongo镜像内置了curl、mongoimport工具,你可以直接用Shell脚本完成远程CSV拉取+导入,和你原有初始化逻辑完全兼容:

  1. 替换原有的init-db.js为init-db.sh,内容如下:
#!/bin/bash
# 拉取远程CSV到临时文件
curl -o /tmp/main.csv https://srv.example.com/main.csv
# 导入CSV到指定库表
mongoimport --uri="mongodb://root:pass@localhost:27017/Exploit_Resources?authSource=admin" \
  --collection EDB \
  --type csv \
  --headerline \
  --drop \
  --file /tmp/main.csv
# 清理临时文件
rm -f /tmp/main.csv

参数说明:

  • --headerline:自动将CSV第一行作为字段名
  • --drop:导入前清空集合,和你原有的db.EDB.drop()逻辑一致
  1. 修改docker-compose.yml中db服务的volumes配置,挂载新的Shell脚本:
volumes:
  - ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro

重新启动容器即可自动完成导入。


方案2:在Flask服务中完成初始化导入

如果你需要对CSV数据做自定义处理,可以把导入逻辑放在Flask服务启动阶段执行,Python实现示例:

import pandas as pd
from pymongo import MongoClient

# 连接MongoDB(host用docker-compose中定义的服务名db)
client = MongoClient("mongodb://root:pass@db:27017/")
db = client["Exploit_Resources"]

# 仅当集合为空时执行导入,避免重复写入
if db.EDB.count_documents({}) == 0:
    # 读取远程CSV
    df = pd.read_csv("https://srv.example.com/main.csv")
    # 批量插入Mongo
    db.EDB.insert_many(df.to_dict("records"))

你可以把这段逻辑放在Flask启动代码的最前面,或者单独写为初始化脚本,在启动Flask服务前执行即可。


内容的提问来源于stack exchange,提问作者Incepnizer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:57:03