如何在非交互式Mongo Docker命令中获取脚本执行输出
解决方法
核心问题原因
load()函数仅返回脚本是否加载成功(即true),不会自动输出脚本内命令的执行结果,这是你得到true而非947的根本原因。
方法1:修改脚本显式打印结果
直接修改script1.txt,将命令结果用print()输出:
print(db.items.find().count());
执行原命令后,即可得到947的输出。
方法2:使用--file参数直接执行脚本(推荐,适合Ansible)
无需通过--eval和load嵌套执行,直接用mongo命令的--file参数指定脚本,同时指定目标数据库,非交互式模式下会自动打印脚本最后一行表达式的结果:
sudo docker exec STG-mongo-rs mongo --port 27065 \ --authenticationDatabase '$external' \ --authenticationMechanism PLAIN \ -u 'mydbuser' -p 'mypassx' \ PP_Metadata \ --file audit/db_execute_scripts/script1.txt
此时script1.txt保留原内容db.items.find().count();即可,执行后会直接输出947。
方法3:在--eval中捕获脚本结果并打印
如果必须使用--eval结合load,可以让脚本将结果赋值给变量,再在eval中打印:
- 修改
script1.txt:var countResult = db.items.find().count(); - 执行命令:
sudo docker exec STG-mongo-rs mongo --port 27065 \ --authenticationDatabase '$external' \ --authenticationMechanism PLAIN \ -u 'mydbuser' -p 'mypassx' \ --eval "db = db.getSiblingDB('PP_Metadata'); load('audit/db_execute_scripts/script1.txt'); print(countResult);"
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

