Setting default database for MongoDB shell

2020-05-19 06:36发布

问题:

When I go into the mongo shell in my terminal, it always starts with the database test, which is the wrong database. Can you set mongo to start in a specific database?

回答1:

Command Line

You can select the database to use on the mongo command line, eg for 'mydb':

mongo mydb

If a database name is not provided, 'test' will be used.

In .mongorc.js

If you want to set a default database without specifying on the command line each time, you can add a line to the .mongorc.js file in your home directory:

db = db.getSiblingDB("mydb")

The .mongorc.js file is executed after the mongo shell is started, so if you set a default here it will override a database specified on the command line.



回答2:

It's entirely possible to set a default, albiet in a slightly strange way. Here's what I do for using automatic authentication to an admin in .mongorc.js:

//Persist the database selected
var selectedDB = db
//Authenticate
db = db.getSiblingDB("admin")
db.auth('admin','adminpass')
//Switch back to selected DB
db = selectedDB
//Universally allow read queries on secondaries from shell. 
rs.slaveOk()

To directly answer the question, I'd think the way to accomplish this is simply by executing a check to see if the current database loaded up is "test" and alter only if that's the case, so.

if(db.name == 'test') db.getSiblingDB('yourdefaultdb')

This allows both selecting a database at the command line and setting a default. Naturally it'll prevent you from overriding and using the "test" db from the command line, but I think that's a bit of a strange use case given the question. Cheers.



回答3:

At the moment (looking 2.6.4) there is no way to universally set the default DB for the client. It seems hardcoded to test. In my anger I downvoted the Stennie's answer [1] because it doesn't work if your user does not have permissions to access the test database. But if your case is not such, then it may work good enough.

[1] and I can't reverse my vote now unless answer is edited