如何在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
相关产品推荐
相关产品推荐

