具体来说,我想打印一个文件的mongodb find()
的结果。 JSON对象太大,所以我无法用shell窗口大小查看整个对象。有没有办法'漂亮'打印MongoDB shell输出到文件?
回答
Shell提供了一些不错的,但隐藏的功能,因为它是一个互动的环境。
当通过蒙戈commands.js你不会得到相当一致的行为您从一个JavaScript文件的命令。
有两种解决方法。
(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
只需将要运行的命令放入文件,然后将其与数据库名称一起传递到shell并将输出重定向到文件。所以,如果你find命令是find.js
和你的数据库是foo
,它应该是这样的:
./mongo foo find.js >> out.json
这并没有为我工作,只印了外壳版本和db名'out.json'。 'mongo foo < find.js > out.json'确实有效。 –
这个答案写在工具围棋被改写之前,许多版本前,除非你使用很老的东西,那么这可能是为什么它不为你工作 –
因为你是一个终端上,只是这样做希望在一个健全的方式来检查的记录,你可以使用一个小技巧是这样的:
mongo | tee somefile
使用会话正常 - db.collection.find().pretty()
或任何你需要做的,忽略了长时间的输出,并退出。您的会话记录将在文件tee
写信给。
要留意的是,输出可能包含转义序列和其他垃圾由于蒙戈外壳期待的交互式会话。 less
优雅地处理这些。
把你的查询(例如db.someCollection.find().pretty()
)的JavaScript文件,比方说query.js
。然后在你的操作系统的shell命令使用运行它:
mongo yourDb <query.js> outputFile
查询结果将被命名为“OUTPUTFILE”的文件中。
默认情况下,Mongo打印出前20个文件IIRC。如果您想要更多,您可以在Mongo shell中定义批量大小的新值,例如
DBQuery.shellBatchSize = 100
。
这个。不要被'.js'扩展名误导。你可以编写所有这些漂亮的mongo shell查询,而不用改变它们。 –
从阿霞甘维珍使用这个answer,我写了一个单行蝙蝠脚本的Windows。该生产线是这样的:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
然后一个可以运行它:
exportToJson.bat DbName CollectionName
使用print
和JSON.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()
);
希望这有助于!
也有mongoexport对于这一点,但我不知道,因为它的版本可用。
例子:
mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json
- 1. Python:有没有办法漂亮地打印列表?
- 2. MongoDB打印漂亮与PyMongo
- 3. 有没有办法让金字塔json渲染器输出格式化,漂亮的打印输出?
- 4. 有没有办法将Swift字典漂亮地打印到控制台?
- 5. 漂亮打印
- 6. Groovy漂亮打印XmlSlurper从HTML输出?
- 7. 与Koa漂亮的打印HTML输出?
- 8. Jekyll漂亮的打印html输出
- 9. Json输出显示打印漂亮
- 10. 漂亮打印到红宝石文件
- 11. 漂亮打印HTML模块?
- 12. 漂亮打印JSON
- 13. 漂亮的打印
- 14. 具有固定线宽输出的XML漂亮打印机
- 15. 有什么办法以漂亮的语法打印数据库内容?
- 16. boost :: property_tree XML漂亮打印
- 17. 有没有办法将shell脚本的输出保存到文本文件中?
- 18. 如何从shell中漂亮地打印Github Webhook有效内容?
- 19. 有没有办法打印SASS值输出?
- 20. 在GHC中,有没有办法打印模块的输出?
- 21. 无法漂亮地打印Json到文本文件
- 22. 漂亮的打印似乎没有正常工作
- 23. 漂亮的打印JSON Rails
- 24. Java:如何漂亮打印.java文件
- 25. 漂亮的打印文件与REXML
- 26. 漂亮的打印制作文件
- 27. jTidy - 没有头的漂亮打印,标题标签
- 28. 在Clojure漂亮打印
- 29. 漂亮打印JSON转储
- 30. 漂亮打印JSON python
我得到加载失败command.js –
command.js必须是一个可读的文件,存在于当前目录中,并且具有要运行的JavaScript。 –
如何为远程mongo数据库执行此操作?我试过'mongo blah.mongolab.com:33478/blah -u user -p pass --eval“我的查询”>> dump.txt',但它给了我'JavaScript执行失败:SyntaxError:意外的标记ILLEGAL'。 – Sheharyar