我正在使用当前的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
功能的某些子集。它是否支持传递查询的功能?
3条答案
按热度按时间eivgtgni1#
同时,这也适用于新的
mongosh
,确保您下载了最新版本(1.1.9或更高版本)请注意,对于经典的
mongo
外壳,您会收到以下警告:在我看来,这不是真的,我还不认为新的
mongosh
会成为mongosh
的继任者。但我必须承认,情况越来越好了。消除此警告的唯一方法是
--eval
选项。cbeh67ev2#
以下代码在mongo中有效(我还没有尝试在mongoh中使用)
所以你的会变成:
vq8itlhq3#
正如MongoDB文档中提到的,您可以编写js脚本并将其与命令行中的--file选项一起使用。
编写如下查询的输出:
db.<collection_name>.findOne();
在您的jscript中使用以下语法:
printjson ( db.<collection_name>.findOne() );
更多细节:https://www.mongodb.com/docs/mongodb-shell/write-scripts/