Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basics of MongoDB Scripts - How to

Tags:

mongodb

nosql

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.


1 Answers

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)
like image 78
Niels van der Rest Avatar answered Sep 15 '25 11:09

Niels van der Rest