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

如何在PowerShell中运行MongoDB脚本并导出输出至文件?

问题描述

我有一个包含以下MongoDB命令的JS文件:

use sdmforms;
db["formResult"].find({"_id": {$regex: /16235195_5.00/}});
db["formResult"].find({"_id": {$regex: /16238178_5.00/}});

我的需求是依次执行这些命令并将输出保存到文件中。

在mongosh中单独运行这些命令时能正常得到屏幕反馈,但在PowerShell中执行以下命令时,生成的文件为空(0KB):

mongosh "mongodb://{my_server}/" "C:/Users/my_user/script_directory/MyFile.js" "C:/Users/my_user/output_directory/MyOutputFile.js"

另外,执行以下命令时,PowerShell也没有任何反馈,生成的文件同样为空:

mongosh "mongodb://{my_server}/" "C:/Users/my_user/script_directory/MyFile.js"

请问如何生成包含输出的文件?我对格式无要求,仅需作为备份保存。

解决方案

方法1:修改JS脚本,主动输出查询结果

mongosh执行脚本时,默认不会自动打印find()的结果(和交互式模式不同),需要显式调用输出方法。修改你的JS文件:

use sdmforms;
// 输出格式化的JSON结果(数据量小的场景)
printjson(db["formResult"].find({"_id": {$regex: /16235195_5.00/}}).toArray());
printjson(db["formResult"].find({"_id": {$regex: /16238178_5.00/}}).toArray());

如果数据量较大,建议用游标遍历输出,避免内存占用过高:

use sdmforms;
// 逐条输出查询结果
db["formResult"].find({"_id": {$regex: /16235195_5.00/}}).forEach(doc => printjson(doc));
db["formResult"].find({"_id": {$regex: /16238178_5.00/}}).forEach(doc => printjson(doc));

方法2:用PowerShell重定向保存输出

修改脚本后,执行命令时用重定向符号将输出写入文件:

# 覆盖目标文件内容
mongosh "mongodb://{my_server}/" "C:/Users/my_user/script_directory/MyFile.js" > "C:/Users/my_user/output_directory/MyOutputFile.txt"

# 追加到目标文件末尾
mongosh "mongodb://{my_server}/" "C:/Users/my_user/script_directory/MyFile.js" >> "C:/Users/my_user/output_directory/MyOutputFile.txt"

方法3:通过mongosh的--eval参数执行输出逻辑(无需修改原脚本)

直接在命令行中指定输出逻辑,适合临时执行的场景:

mongosh "mongodb://{my_server}/" --eval "
use sdmforms;
printjson(db['formResult'].find({'_id': {$regex: /16235195_5.00/}}).toArray());
printjson(db['formResult'].find({'_id': {$regex: /16238178_5.00/}}).toArray());
" > "C:/Users/my_user/output_directory/MyOutputFile.txt"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:42:34