How to print out more than 20 items (documents) in MongoDB's shell?

Mongodb

Mongodb Problem Overview


db.foo.find().limit(300)

won't do it. It still prints out only 20 documents.

db.foo.find().toArray()
db.foo.find().forEach(printjson)

will both print out very expanded view of each document instead of the 1-line version for find():

Mongodb Solutions


Solution 1 - Mongodb

Solution 2 - Mongodb

From the shell you can use:

db.collection.find().toArray()

to display all documents without having to use it.

Solution 3 - Mongodb

You can use it inside of the shell to iterate over the next 20 results. Just type it if you see "has more" and you will see the next 20 items.

Solution 4 - Mongodb

Could always do:

db.foo.find().forEach(function(f){print(tojson(f, '', true));});

To get that compact view.

Also, I find it very useful to limit the fields returned by the find so:

db.foo.find({},{name:1}).forEach(function(f){print(tojson(f, '', true));});

which would return only the _id and name field from foo.

Solution 5 - Mongodb

I suggest you to have a ~/.mongorc.js file so you do not have to set the default size everytime.

 # execute in your terminal
 touch ~/.mongorc.js
 echo 'DBQuery.shellBatchSize = 100;' > ~/.mongorc.js
 # add one more line to always prettyprint the ouput
 echo 'DBQuery.prototype._prettyShell = true; ' >> ~/.mongorc.js

To know more about what else you can do, I suggest you to look at this article: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html

Solution 6 - Mongodb

With newer version of mongo shell (mongosh) use following syntax:

config.set("displayBatchSize", 300)

instead of depreciated:

DBQuery.shellBatchSize = 300

Future find() or aggregate() operations will only return 300 documents per cursor iteration.

Solution 7 - Mongodb

In the mongo shell, if the returned cursor is not assigned to a variable using the var keyword, the cursor is automatically iterated to access up to the first 20 documents that match the query. You can set the DBQuery.shellBatchSize variable to change the number of automatically iterated documents.

Reference - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

Solution 8 - Mongodb

show dbs

use your database name in my case, I'm using - use smartbank then - show collections - just to check the document collections name. and finally, db. your collection name.find() or find({}) -

show dbs

use smartbank

show collections

db.users.find() or db.users.find({}) or db.users.find({_id: ObjectId("60c8823cbe9c1c21604f642b")}) or db.users.find({}).limit(20)

you can specify _id:ObjectId(write the document id here) to get the single document

or you can specify limit - db.users.find({}).limit(20)

enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnonopolarityView Question on Stackoverflow
Solution 1 - MongodbThiloView Answer on Stackoverflow
Solution 2 - MongodbSridharView Answer on Stackoverflow
Solution 3 - MongodbhalfdanView Answer on Stackoverflow
Solution 4 - MongodbWilfred KnievelView Answer on Stackoverflow
Solution 5 - MongodbSahith VibudhiView Answer on Stackoverflow
Solution 6 - MongodbsevenView Answer on Stackoverflow
Solution 7 - MongodbHarsh RajView Answer on Stackoverflow
Solution 8 - MongodbLutfor RahmanView Answer on Stackoverflow