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

Bash脚本读取CSV通过--eval插入Mongo报SyntaxError问题求助

问题根因

你遇到的两个报错均为Bash变量拼接逻辑与Mongo Shell语法冲突导致:

  • 新增dob字段后报引号未终止:你的CSV中dob字段值大概率包含双引号、单引号或其他特殊字符,直接拼接进eval参数后打断了Mongo JS的字符串语法结构
  • 修改引号后报user X is not defined:修改引号逻辑后,原本应该作为字符串的变量值没有被双引号包裹,Mongo Shell将其识别为未定义的变量触发报错
  • 插入$userName字面量的问题:变量放在单引号包裹的eval参数内时,Bash不会解析变量,会直接将变量名作为字符串写入MongoDB

修正后的完整脚本

#!/bin/bash
# 统一配置数据库名和集合名,切换性别/环境时修改更方便
DB_NAME="USERNAME_a5"
# 处理女性数据时改为USERNAME_female_a5即可
COLLECTION_NAME="USERNAME_male_a5"

while IFS=, read -r userName firstName lastName gender dob language bloodType zodiac constellation planet genre dino;
do
  mongo "$DB_NAME" --eval "db.$COLLECTION_NAME.insert({
    username: \"$userName\",
    first: \"$firstName\",
    last: \"$lastName\",
    gender: \"$gender\",
    dob: \"$dob\",
    language: \"$language\",
    blood_type: \"$bloodType\",
    zodiac: \"$zodiac\",
    constellations: \"$constellation\",
    planets: \"$planet\",
    tv_genre: \"$genre\",
    dino: \"$dino\"
  })"
done < males1.csv

额外优化建议

  • 如果CSV字段值本身包含双引号,需要先预处理CSV,把值内的双引号替换为转义后的\",避免仍出现语法报错
  • 批量插入数据时可以把所有记录拼接为数组,调用insertMany一次性插入,不需要循环逐条执行,性能提升明显
  • 如果CSV字段存在空值,可以加逻辑判断后再插入,避免插入空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:04