【发布时间】:2012-07-05 09:16:12
【问题描述】:
当我在终端中进入 mongo shell 时,它总是以数据库测试开始,这是错误的数据库。可以设置 mongo 在特定数据库中启动吗?
【问题讨论】:
-
使用它在连接字符串中添加默认数据库:stackoverflow.com/questions/22418052/…
当我在终端中进入 mongo shell 时,它总是以数据库测试开始,这是错误的数据库。可以设置 mongo 在特定数据库中启动吗?
【问题讨论】:
您可以在mongo command line 上选择要使用的数据库,例如'mydb':
mongo mydb
如果没有提供数据库名称,将使用“test”。
如果你想设置一个默认数据库而不每次都在命令行中指定,你可以在你的主目录的.mongorc.js文件中添加一行:
db = db.getSiblingDB("mydb")
.mongorc.js 文件在mongo shell 启动后执行,因此如果您在此处设置默认值,它将覆盖在命令行中指定的数据库。
【讨论】:
.mongorc.js,可以运行 mongo --norc。
test 的权限,那么您将在.mongorc.js 启动之前被踢出身份验证。
目前(看起来是 2.6.4)没有办法为客户端普遍设置默认数据库。它似乎硬编码为test。在我的愤怒中,我否决了 Stennie 的答案 [1],因为如果您的用户没有访问测试数据库的权限,它就不起作用。但是,如果您的情况不是这样,那么它可能就足够了。
[1] 除非编辑答案,否则我现在无法撤销投票
【讨论】:
strings /usr/bin/mongo | grep 'dbName || "test"' 显示多个实例。
完全可以设置默认值,虽然方式有点奇怪。这是我在 .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()
要直接回答这个问题,我认为完成此问题的方法是简单地执行检查以查看当前加载的数据库是否为“测试”,并且仅在这种情况下进行更改,所以。
if (db.name == 'test')
db.getSiblingDB('yourdefaultdb')
这允许在命令行中选择数据库并设置默认值。自然,它会阻止您从命令行覆盖和使用“测试”数据库,但我认为考虑到这个问题,这有点奇怪。干杯。
【讨论】: