通过管道将Mongoh MongoDB Shell的输出输出到输出文件(Windows)

mnemlml8  于 2022-09-18  发布在  Go
关注(0)|答案(3)|浏览(272)

我正在使用当前的mongosh工具运行Mongo查询,它可能会返回非常大的结果集,这些结果集可能无法放入命令提示符的缓冲区中(即使它们放在了缓冲区中,手动复制这样的结果也会很耗时且容易出错)。因此,我希望有能力:

  • 通过管道将mongosh的输出传输到文本文件,并
  • 还要传入从命令行运行的Mongo脚本或查询

以下是我当前正在运行的命令(详细信息已屏蔽):

mongosh "mongodb://10.20.30.40:26017" --username my_username --password my_password
    --authenticationDatabase my_database > output.txt

这是我在output.txt中看到的当前输出:

Current sessionID:  1ee96e0f6025ec328ea25ccc
Connecting to:      mongodb://10.20.30.40:26017
Using MongoDB:      3.4.13
Using Mongosh Beta: 0.0.6

For more information about mongosh, please see our docs: https://docs.mongodb.com/mongodb-shell/

[1G[0J> [3G

因此,到输出文件的重定向似乎起作用了。然而,我似乎想不出如何使用命令行工具的实际查询来指定Mongo脚本。例如,如果我想指定以下简单的计数查询,我该如何做呢?

db.getCollection('my_collection').count();

理想情况下,我希望output.txt只有一行包含此集合中的计数。

早期的mongo命令行工具似乎有许多在查询中使用管道的方法,例如通过指定脚本或使用--eval选项。documentation for mongosh声称该工具处于Beta模式,并支持mongo功能的某些子集。它是否支持传递查询的功能?

eivgtgni

eivgtgni1#

同时,这也适用于新的mongosh,确保您下载了最新版本(1.1.9或更高版本)

echo "db.getCollection('my_collection').countDocuments({});" | mongosh --norc --quiet > output.txt

mongosh --norc --quiet > output.txt <<EOF
db.getCollection('my_collection').countDocuments({});
EOF

mongosh --norc --quiet --eval "db.getCollection('my_collection').countDocuments({})" > output.txt

请注意,对于经典的mongo外壳,您会收到以下警告:

================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
We recommend you begin using "mongosh".
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================

在我看来,这不是真的,我还不认为新的mongosh会成为mongosh的继任者。但我必须承认,情况越来越好了。

消除此警告的唯一方法是--eval选项。

cbeh67ev

cbeh67ev2#

以下代码在mongo中有效(我还没有尝试在mongoh中使用)

mongo --eval "db=db.getSiblingDB('DB NAME'); printjson(db.COLLECTION.findOne())" > output.txt --quiet

所以你的会变成:

mongo "mongodb://10.20.30.40:26017" --username my_username --password my_password --authenticationDatabase my_database --eval "db=db.getSiblingDB('my_database'); printjson(db.my_collection.count())" > output.txt --quiet
vq8itlhq

vq8itlhq3#

正如MongoDB文档中提到的,您可以编写js脚本并将其与命令行中的--file选项一起使用。

mongosh --norc --quiet --file "test_script.js" > output.txt

编写如下查询的输出:db.<collection_name>.findOne();

在您的jscript中使用以下语法:printjson ( db.<collection_name>.findOne() );

更多细节:https://www.mongodb.com/docs/mongodb-shell/write-scripts/

相关问题