有没有一种方式,以“漂亮”打印MongoDB的外壳输出到文件?(Is there a way to

2019-06-18 16:49发布

具体而言,我想打印的MongoDB结果find()到一个文件中。 JSON对象是太大,所以我无法查看与shell窗口大小整个对象。

Answer 1:

外壳提供了一些好的,但隐藏的功能,因为它是一个互动的环境。

当您从一个JavaScript文件运行命令通过蒙戈commands.js你不会得到相当一致的行为。

这种情况有解决方法有两种。

(1)假出壳并使其觉得你是在交互模式

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

要么
(2)使用Javascript将结果翻译了的find()成可打印的JSON

mongo dbname command.js > output.json

其中command.js包含此(其当量或):

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

这将相当打印结果的阵列,其中包括[ ] -如果你不想,你可以遍历数组和printjson()的每个元素。

顺便说一句,如果你正在运行只是一个单一的JavaScript语句,你不必把它放在一个文件,而是你可以使用:

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


Answer 2:

既然你这样做是在终端上,只是想在一个健全的方式来检查的记录,你可以使用这样的伎俩:

mongo | tee somefile

使用会话正常- db.collection.find().pretty()或任何你需要做的,忽略了长时间的输出,并退出。 您的会话中的将在文件tee写信给。

要留意的是,输出可能包含转义序列和其他垃圾由于蒙戈外壳期待的交互式会话。 less正常处理这些。



Answer 3:

只要把你想运行到一个文件中的命令,然后将它传递到外壳与数据库名称一起,并将输出重定向到一个文件中。 所以,如果你find命令是find.js和你的数据库是foo ,它应该是这样的:

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


Answer 4:

把你的查询(例如db.someCollection.find().pretty()到一个JavaScript文件,比方说query.js 。 然后在你的操作系统的shell命令使用运行它:

mongo yourDb < query.js > outputFile

查询结果将被命名为“OUTPUTFILE”的文件中。

默认情况下,蒙戈打印出第20个文档IIRC。 如果您想了解更多,你可以在蒙戈外壳,如定义新的价值,批量大小

DBQuery.shellBatchSize = 100



Answer 5:

使用printJSON.stringify您只需出示有效的 JSON结果。
使用--quiet标志输出滤波壳噪音。
使用--norc标志,以免.mongorc.js评价。 (我不得不这样做,因为一个漂亮的格式器,我使用,产生无效JSON输出)使用DBQuery.shellBatchSize = ? 更换? 与实际结果的限制,以避免分页。

最后,使用tee管道的终端输出到文件:

// Shell:
mongo --quiet --norc ./query.js | tee ~/my_output.json

// query.js:
DBQuery.shellBatchSize = 2000;
function toPrint(data) {
  print(JSON.stringify(data, null, 2));
}

toPrint(
  db.getCollection('myCollection').find().toArray()
);

希望这可以帮助!



Answer 6:

使用此答案由阿霞卡姆斯基,我写了一个单行蝙蝠脚本的Windows。 该行如下所示:

mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json

然后一个可以运行它:

exportToJson.bat DbName CollectionName



Answer 7:

也有mongoexport对于这一点,但我不知道,因为它的版本可用。

例:

mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json


Answer 8:

由于答案通过Neodan mongoexport是相当有用的-q查询选项。 它还转换ObjectId以JSON的标准格式"$oid" 。 例如:

mongoexport -d yourdb -c yourcol --jsonArray --pretty -q '{"field": "filter value"}' -o output.json


文章来源: Is there a way to 'pretty' print MongoDB shell output to a file?