如何从命令行执行多个MongoDB脚本?
解决MongoDB批量执行多个查询脚本的问题
这问题我之前也碰到过!你直接用mongo db-name < query*失败的原因很明确:shell的输入重定向(<)只能接收单个文件,当你用通配符query*时,shell会把它展开成query1.js query2.js ...这样的多个文件名,但重定向没法同时读取多个文件的内容,自然就执行失败了。
给你几个实用的解决方案:
方法1:用cat拼接所有脚本后一次性执行
这是最快捷的方式,把所有query*.js的内容拼接起来,通过管道传给mongo命令:
cat query*.js | mongo db-name
这种方式会把所有脚本的执行结果合并输出,适合不需要区分单个脚本执行情况的场景。
方法2:循环逐个执行每个脚本
如果你需要单独查看每个脚本的执行结果,或者某个脚本执行失败时能及时定位问题,可以写个简单的shell循环:
for script in query*.js; do echo "正在执行脚本: $script" mongo db-name < "$script" echo "脚本 $script 执行完成" done
这个循环会遍历所有匹配query*.js的文件,逐个执行,还能打印每个脚本的执行状态,排查问题更方便。
方法3:合并到临时文件再执行
如果你担心管道或者循环的稳定性,也可以先把所有脚本合并到一个临时文件,再执行:
cat query*.js > all-queries.js mongo db-name < all-queries.js # 执行完可按需删除临时文件 rm all-queries.js
这种方式和方法1效果类似,但多了一个临时文件的步骤,适合需要保留合并后脚本的场景。
内容的提问来源于stack exchange,提问作者ashwin jayakumar
相关产品推荐
相关产品推荐

