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

如何在非交互式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中打印:

  1. 修改script1.txt:
    var countResult = db.items.find().count();
    
  2. 执行命令:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:22:56