Mongo出生2天,我有SQL的背景,所以请耐心等待。与mysql一样,在MySQL命令行中将查询结果输出到机器上的文件非常方便。我试图了解如何在shell中使用Mongo做同样的事情
我可以通过在shell之外并执行以下命令轻松获得我想要的查询的输出:
mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" > sample.json
上面的方式很好,但是它需要我退出mongoshell或打开一个新的终端选项卡来执行这个命令。如果我可以在仍然在shell中的情况下简单地这样做,那将是非常方便的。
附言:问题是我在SO上发布的一个问题的分支
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