提问者:小点点

在mongoshell中打印Mongo查询输出到文件


Mongo出生2天,我有SQL的背景,所以请耐心等待。与mysql一样,在MySQL命令行中将查询结果输出到机器上的文件非常方便。我试图了解如何在shell中使用Mongo做同样的事情

我可以通过在shell之外并执行以下命令轻松获得我想要的查询的输出:

mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" > sample.json

上面的方式很好,但是它需要我退出mongoshell或打开一个新的终端选项卡来执行这个命令。如果我可以在仍然在shell中的情况下简单地这样做,那将是非常方便的。

附言:问题是我在SO上发布的一个问题的分支


共3个答案

匿名用户

AFAIK,输出到文件没有交互式选项,前面有一个与此相关的SO问题:将mongoDB shell输出打印到文件

但是,如果您使用ted命令调用shell,您可以记录所有shell会话:

$ mongo | tee file.txt
MongoDB shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

然后您将获得一个包含以下内容的文件:

MongoDB shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

要删除所有命令并仅保留json输出,您可以使用类似于以下命令的命令:

tail -n +3 file.txt | egrep -v "^>|^bye" > output.json

然后你会得到:

{ "this" : "is a test" }
{ "this" : "is another test" }

匿名用户

我们可以这样做-

mongo db_name --quiet --eval 'DBQuery.shellBatchSize = 2000; db.users.find({}).limit(2000).toArray()' > users.json

shellBatchSize参数用于确定mongo客户端允许打印多少行。它的默认值是20。

匿名用户

如果您使用script-file、db地址和--安静参数调用shell,您可以将输出(例如使用print()生成)重定向到文件:

mongo localhost/mydatabase --quiet myScriptFile.js > output