With mongo you can write scripts that get passed into the shell like:
mongo myDB script.js
http://docs.mongodb.org/manual/tutorial/write-scripts-for-the-mongo-shell/
but to access the mongo shell of a deployed meteor app is says to do the following:
meteor mongo myApp.meteor.com
I can't pass the script file with this statement like so:
meteor mongo myApp.meteor.com script.js
because my deployed app is password protected and the above statement feeds script.js into the password prompt.
So the question is how would you do this?
Alternatively how can you connect to a deployed meteor app's mongo shell without using meteor?
Get the instance's login details via meteor mongo myapp.meteor.com --url
. You'll get something that should match up to
mongodb://username
:password
@host
:port
/databasename
Which you can use to login via mongo
on your computer. Be aware the login details last for only 1 minute by which time you need to meteor mongo --url
again
mongo host:port/databasename -u username -p password yourscript.js
Expanding a bit on Akshat's answer. The URI string that meteor mongo --url
puts out is a MongoDB Connection String. It is a bit surprising that the mongo shell itself does not support this format. This has been reported as a bug; also see this Stack Overflow answer.
It would be nice if meteor mongo
had a way of passing parameters unparsed directly to the mongo shell. Following a common Unix idiom it could've be something like:
meteor mongo myapp.meteor.com -- myscript.js --some-other-mongo-parameter
But that does not work (I submitted a feature request).
I wrote a convenience wrapper for all the mongo client shell commands. You can install it with NPM:
npm install -g mmongo
If you don't use NPM, it's just a single file to drop somewhere in your $PATH
; see the README at Github.
You can now do:
mmongo myapp.meteor.com myscript.js
Also see this answer for some examples.
(There was previously a less featured script in Ruby here; see this Gist.)