ChatGPT解决这个技术问题 Extra ChatGPT

Pretty print in MongoDB shell as default

Is there a way to tell Mongo to pretty print output? Currently, everything is output to a single line and it's difficult to read, especially with nested arrays and documents.

Now: how do you print it from external javascript loaded into Mongo?
@WitoldKaczurba Try searching for the answer to your question. If you don't find an answer, go ahead and post it as a new question.
If you want colorized output and beautiful logging with MongoDB and Ruby on Rails, you can checkout github.com/ibraheemdev/mongo_beautiful_logger

S
Sergio Tulentsev

(note: this is answer to original version of the question, which did not have requirements for "default")

You can ask it to be pretty.

db.collection.find().pretty()

If you want output colorized + other enhancements check out github.com/TylerBrock/mongo-hacker @SAFX
Now: how do you print it from external javascript loaded into Mongo? This will not work...
S
Sergio Tulentsev

You can add

DBQuery.prototype._prettyShell = true

to your file in $HOME/.mongorc.js to enable pretty print globally by default.


You'll want to make a custom function that disables it for you. Add this to your $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Then you can do something like db.users.find().ugly() to get it without pretty print.
+1 This is great. For those who doesn't have a .mongorc.js file in $HOME folder; you can create this file and add commands in it. After you restart shell, it works!
How can I verify in a cli or in mongo shell that this option has been enabled? I mean, is there a special command for it, like mongo --checkConf 'pretty', not by calling db.collection.find().limit(1)
@staackuser2, that link seems to be broken :(
Would be nice if this was set to true by default
S
Sergio Tulentsev

(note: this is answer to the updated question)

You can just do this on the CLI:

echo DBQuery.prototype._prettyShell = true >> ~/.mongorc.js

And it's always going to output pretty results.


This worked for me perfectly. | MongoDB shell version: 2.6.7 and Oh-My-Zsh version e55c715
A
Aafreen Sheikh

Since it is basically a javascript shell, you can also use toArray():

db.collection.find().toArray()

However, this will print all the documents of the collection unlike pretty() that will allow you to iterate. Refer: http://docs.mongodb.org/manual/reference/method/cursor.toArray/


Interestingly enough, from the console the .toArray() function outputs better formatted JSON than the .pretty() function. ie: The first record of my collection is different than the rest (which may be the problem), but .pretty() dumps it out as { "_id" : "VERSION", "v" : "1.5" } - all on one line, where .toArray() formatted it nice like the rest of the records..
G
Goff

Oh so i guess .pretty() is equal to:

db.collection.find().forEach(printjson);

G
Gaurav Gandhi

Give a try to Mongo-hacker(node module), it alway prints pretty. https://github.com/TylerBrock/mongo-hacker

More it enhances mongo shell (supports only ver>2.4, current ver is 3.0), like

Colorization

Additional shell commands (count documents/count docs/etc)

API Additions (db.collection.find({ ... }).last(), db.collection.find({ ... }).reverse(), etc)

Aggregation Framework

I am using for while in production env, no problems yet.


What if I don't have mongodb, just installed meteor?
Note: when you install mongo-hacker using npm, it apparently overwrites $HOME/.mongorc.js.
W
Witold Kaczurba

Got to the question but could not figure out how to print it from externally-loaded mongo. So:

This works is for console: and is prefered in console, but does not work in external mongo-loaded javascript:

db.quizes.find().pretty()

This works in external mongo-loaded javscript:

db.quizes.find().forEach(printjson)

M
Mohammad Heydari

Check this out:

db.collection.find().pretty()