为MongoDB shell设置默认数据库

39

当我进入终端中的Mongo Shell时,它总是以错误的数据库test启动。您是否可以将Mongo设置为在特定数据库中启动?


使用此方法在连接字符串中添加默认数据库: https://dev59.com/NH3aa4cB1Zd3GeqPf6Er#67114084 - KushalSeth
3个回答

52

命令行

你可以在 mongo 命令行 上选择要使用的数据库,例如 'mydb':

mongo mydb

如果没有提供数据库名称,则将使用“test”。

在.mongorc.js中

如果您想设置默认数据库而不必每次在命令行上指定,可以在主目录中的.mongorc.js文件中添加一行:

db = db.getSiblingDB("mydb")

.mongorc.js文件在mongo shell启动后执行,因此如果您在此处设置默认值,它将覆盖在命令行上指定的数据库。


2
我的意思是像设置一个默认的数据库使用,这样我就不必每次都从测试开始了。不过现在我已经在我的.bash_profile中设置了一个别名。 - Holger Sindbaek
4
我之前没有意识到 .mongorc.js 的影响。在使用 .mongorc.js 时要小心,因为当你连接到其他数据库(比如生产环境)时,它仍会运行相同的命令。 - Kirk
2
@kirk:如果你不想在启动shell时运行.mongorc.js,可以运行mongo --norc - Stennie
1
如果您没有访问数据库 test 的权限,则在 .mongorc.js 启动之前进行身份验证时会被踢出。 - akostadinov
如果您正在使用mongosh,请编辑.mongoshrc.js文件。 - Ng Lok Chun

5

完全可以通过一种略微奇怪的方式设置默认值。以下是在 .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”数据库,但我认为这是一个有点奇怪的用例,与问题无关。干杯。

1

目前(查看2.6.4),没有一种通用的方法可以为客户端设置默认的数据库。它似乎是硬编码到 test 中的。我很生气地给 Stennie 的答案 [1] 投了反对票,因为如果您的用户没有权限访问测试数据库,则该答案无法正常工作。但是,如果您的情况不是这样,那么它可能足够好。

[1] 我现在无法撤回我的投票,除非答案被编辑过。


“test”数据库作为默认数据库的硬编码在哪里?我尝试在root/.mongorc.js中使用**db = db.getSiblingDB("mydb")**,但不起作用。 - KTM
2
@Crazyrubixfan 显然这就在 mongo shell 可执行文件本身中:strings /usr/bin/mongo | grep 'dbName || "test"' 显示多个实例。 - Peter Hansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接