how do you run a mongo shell script with a deploye

2020-05-29 04:48发布

问题:

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?

回答1:

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


回答2:

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