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?
3 Answers
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 (or .mongoshrc.js for mongosh) 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.
5 Comments
mongo --norc if you don't want .mongorc.js to be run when the shell starts.test then you are kicked out on authentication before .mongorc.js kicks in.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 .mongoshrc.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.getName() === 'test') {
db = 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.
Comments
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
2 Comments
strings /usr/bin/mongo | grep 'dbName || "test"' shows multiple instances.