为MongoDB shell设置默认数据库
当我进入终端中的mongo shell时,它总是从数据库测试开始,这是错误的数据库。能否将mongo设置为在特定数据库中启动?命令行 您可以选择要在上使用的数据库,例如“mydb”:为MongoDB shell设置默认数据库,shell,mongodb,terminal,Shell,Mongodb,Terminal,当我进入终端中的mongo shell时,它总是从数据库测试开始,这是错误的数据库。能否将mongo设置为在特定数据库中启动?命令行 您可以选择要在上使用的数据库,例如“mydb”: mongo mydb 如果未提供数据库名称,将使用“test” In.mongorc.js 如果要设置默认数据库而不每次在命令行上指定,可以在主目录中的文件中添加一行: db = db.getSiblingDB("mydb") .mongorc.js文件是在启动mongoshell之后执行的,因此如果您在此处设
mongo mydb
如果未提供数据库名称,将使用“test”
In.mongorc.js
如果要设置默认数据库而不每次在命令行上指定,可以在主目录中的文件中添加一行:
db = db.getSiblingDB("mydb")
.mongorc.js
文件是在启动mongo
shell之后执行的,因此如果您在此处设置默认值,它将覆盖命令行上指定的数据库。目前(查看2.6.4),无法为客户机普遍设置默认数据库。它似乎被硬编码为测试
。在我的愤怒中,我否决了Stennie的答案[1],因为如果您的用户没有访问测试数据库的权限,那么它就不起作用。但如果你的情况不是这样,那么它可能就足够有效了
[1] 我现在不能逆转我的投票,除非答案被编辑。完全有可能以一种稍微奇怪的方式设置默认值。以下是我在.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()
为了直接回答这个问题,我认为实现这一点的方法只是执行一个检查,查看当前加载的数据库是否为“test”,并仅在这种情况下进行更改,所以
if (db.name == 'test')
db.getSiblingDB('yourdefaultdb')
这允许在命令行中选择数据库并设置默认值。当然,它会阻止您从命令行重写和使用“test”db,但我认为这是一个有点奇怪的用例。干杯。我的意思是设置要使用的默认数据库,这样我就不必每次都在测试中启动。不过,我现在在.bash_profil中设置了一个别名。我没有意识到.mongorc.js的影响。使用.mongorc.js时要小心,因为当您连接到其他数据库(如生产数据库)时,它仍然会运行相同的命令。@kirk:FYI,如果您不想在shell启动时运行
.mongorc.js
,您可以运行mongo--norc
。-1,如果您没有访问数据库test
的权限,则在.mongorc.js
启动之前,您将被逐出身份验证。默认数据库硬编码的“test”db在哪里?我在root/.mongorc.js中尝试了db=db.getSiblingDB(“mydb”),但没有working@Crazyrubixfan显然,它在mongo shell可执行文件本身中是正确的:strings/usr/bin/mongo | grep'dbName | | |“test”
显示了多个实例。使用此选项可在连接字符串中添加默认数据库: