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

新手上路,请多包涵

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

原文由 viper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 751
2 个回答

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

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

有两种解决方法。

(1) 伪造外壳并让它认为您处于交互模式

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

或者

(2) 使用 Javascript 将 a 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

原文由 Asya Kamsky 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 mongo | tee somefile

正常使用会话 - db.collection.find().pretty() 或任何你需要做的事情,忽略长输出,然后退出。您的会话记录将在文件中 tee 写入。

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

原文由 Falcon Momot 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题