11

When I run this command in robomongo, I get a output with different rows:

 db.getCollection('houses').find({}) 

Now I tried to run the same command in the mongo shell:

I wrote a script mongo.js:

 conn = new Mongo(); db = conn.getDB("development"); db.getCollection('houses').find({}); 

Opened the console with:

 mongo --shell 

And tried to run the command:

 > load('mongo.js') true 

I do not understand why I get only true as output. I want to see the query output! What do I wrong? Thanks

4 Answers 4

38

In the shell script, instead of console.log you can use

print() // for plain texts,

or printjson() // for json

usage :

printjson(db.getCollection('houses').find({}));

Sign up to request clarification or add additional context in comments.

Comments

6

When using

printjson(db.getCollection('houses').find({})); 

I get the output from the find object.

{ "_mongo" : connection to ***.***.***.***, "_db" : *****, "_collection" : ***.houses, "_ns" : "*****.houses", "_query" : { }, "_fields" : null, "_limit" : 0, "_skip" : 0, "_batchSize" : 0, "_options" : 4, "_cursor" : null, "_numReturned" : 0, "_special" : false, "help" : function () { print("find(<predicate>, <projection>) modifiers") print("\t.sort({...})") ........... } 

if you use

db.getCollection('houses').find({}).forEach(printjson) 

I get the desired output.

Comments

0

An advancement for bigger scripts to keep the overview:

executeCommandAndLogResult( "Rename the collection", () => db.getCollection('collection_a').renameCollection("collection_b") ); function executeCommandAndLogResult(commandName, command) { printjson("--------------------------- Result of '" + commandName + "'-----------------------------") printjson(command()); printjson("------------------------------ End of '" + commandName + "'-----------------------------") } 

The result will look like this if the renaming was successfull:

"--------------------------- Result of 'Rename the collection'-----------------------------" { "ok" : 1 } "------------------------------ End of 'Rename the collection'-----------------------------" 

Or like this if not:

"--------------------------- Result of 'Rename the collection'-----------------------------" { "ok" : 0, "errmsg" : "source namespace does not exist", "code" : 26, "codeName" : "NamespaceNotFound" } "------------------------------ End of 'Rename the collection'-----------------------------" 

Comments

0

Instead of using:

printjson(db.getCollection('houses').find({})); 

Use the findOne:

printjson(db.getCollection('houses').findOne({...})); 

Or, if you want to print multiple results, make sure to convert them to the array first:

printjson(db.getCollection('houses').find({}).toArray()); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.