Basics of MongoDB Scripts - How to

2019-03-10 01:16发布

问题:

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:

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)


回答2:

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);


回答3:

linux or mac shell:

user@comp:$ mongo < script.js


标签: mongodb nosql