具體來說,我想打印一個文件的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