nonopolarity
nonopolarity

Reputation: 150956

Basics of MongoDB Scripts - How to

What are the basics of MongoDB Scripts?

I think the script will end with .js, and we run it using mongo try.js

But if I put

print(db.foo.find())

in try.js and use mongo try.js

it will say

MongoDB shell version: 1.6.1
connecting to: test
DBQuery: test.foo -> undefined

and if I use the interactive shell by typing mongo and type

> db.foo.find()
{ "_id" : ObjectId("4c7a73428261000000003a7e"), "a" : 1 }
> print(db.foo.find())
DBQuery: test.foo -> undefined

the {a : 1} was something I inserted earlier using db.foo.insert({a:1})

what are the proper ways of doing MongoDB Scripts and how to print things out like a Ruby irb or Python's IDLE? thanks. (Ruby's puts a.inspect or p a can both print out the whole structure of a usually (all the variable names and values in a))

alert(db.foo.find()) and console.log(db.foo.find()) won't work either.

Upvotes: 23

Views: 18600

Answers (3)

Andrew
Andrew

Reputation: 37969

linux or mac shell:

user@comp:$ mongo < script.js

Upvotes: 1

dtbarne
dtbarne

Reputation: 8190

There's a built-in function for printing a json object.

Just append .forEach(printjson) to the end of the function call.

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

Upvotes: 15

Niels van der Rest
Niels van der Rest

Reputation: 32184

The external script files are executed outside of the shell context.

The db.foo.find() database command only returns a cursor; it doesn't print anything by itself. When the command is issued from the shell, the shell will iterate the cursor and print the results. When the command is run from an external script file, nothing is printed.

The print() command will print out the string representation of the object. In your case, it's the cursor:

> print(db.foo.find())
DBQuery: test.foo -> undefined

If you need to print results of the query, you'll have to iterate the cursor in your script file and print each result, similarly to what the shell does:

function printResult (r) {
  print(tojson(r))
}

db.foo.find().forEach(printResult)

Upvotes: 40

Related Questions