提问者:小点点

有没有办法“漂亮”地将MongoDB shell输出打印到文件中?


具体来说,我想将mongoDBfind()的结果打印到文件中。JSON对象太大,因此我无法使用shell窗口大小查看整个对象。


共3个答案

匿名用户

shell提供了一些不错但隐藏的功能,因为它是一个交互式环境。

当你通过mongo命令. js从javascript文件运行命令时,你不会得到完全相同的行为。

有两种方法可以解决这个问题。

(1)假出shell,让它以为你在交互模式

$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF

或者
(2)使用Javascript将find()的结果翻译成可打印的JSON

mongo dbname command.js > output.json

其中命令. js包含this(或其等效项):

printjson( db.collection.find().toArray() )

这将很好地打印结果数组,包括[]-如果您不希望这样,您可以遍历数组和printjson()每个元素。

顺便说一句,如果您只运行一个Javascript语句,您不必将其放入文件中,而是可以使用:

$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json

匿名用户

由于您在终端上执行此操作,并且只想以理智的方式检查记录,因此可以使用如下技巧:

mongo | tee somefile

像往常一样使用会话-db.集合. find().漂亮()或任何您需要做的事情,忽略长输出,然后退出。您的会话记录将在写入的文件ted中。

请注意,由于mongoshell期望交互式会话,输出可能包含转义序列和其他垃圾。less优雅地处理这些。

匿名用户

只需将您要运行的命令放入文件中,然后将其与库名一起传递给shell,并将输出重定向到文件。因此,如果您的查找命令在find. js中,并且您的数据库是foo,则如下所示:

./mongo foo find.js >> out.json