【问题标题】:Setting default database for MongoDB shell为 MongoDB shell 设置默认数据库
【发布时间】:2012-07-05 09:16:12
【问题描述】:

当我在终端中进入 mongo shell 时,它总是以数据库测试开始,这是错误的数据库。可以设置 mongo 在特定数据库中启动吗?

【问题讨论】:

标签: shell mongodb terminal


【解决方案1】:

命令行

您可以在mongo command line 上选择要使用的数据库,例如'mydb':

mongo mydb

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

在 .mongorc.js 中

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

db = db.getSiblingDB("mydb")

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

【讨论】:

  • 我的意思是设置一个默认数据库来使用,这样我就不必每次都在测试中启动。不过,我现在已经在我的 .bash_profil 中设置了一个别名。
  • 我没有意识到 .mongorc.js 的影响。使用 .mongorc.js 时要小心,因为当你连接到其他数据库时,比如你的生产数据库,它仍然会运行相同的命令。
  • @kirk:仅供参考,如果您不想在 shell 启动时运行 .mongorc.js,可以运行 mongo --norc
  • -1,如果您没有访问数据库test 的权限,那么您将在.mongorc.js 启动之前被踢出身份验证。
【解决方案2】:

目前(看起来是 2.6.4)没有办法为客户端普遍设置默认数据库。它似乎硬编码为test。在我的愤怒中,我否决了 Stennie 的答案 [1],因为如果您的用户没有访问测试数据库的权限,它就不起作用。但是,如果您的情况不是这样,那么它可能就足够了。

[1] 除非编辑答案,否则我现在无法撤销投票

【讨论】:

  • 作为默认数据库硬编码的“测试”数据库在哪里?我在 root/.mongorc.js 中尝试了 db = db.getSiblingDB("mydb") 但没有工作
  • @Crazyrubixfan 显然它在 mongo shell 可执行文件本身中是正确的:strings /usr/bin/mongo | grep 'dbName || "test"' 显示多个实例。
【解决方案3】:

完全可以设置默认值,虽然方式有点奇怪。这是我在 .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')

这允许在命令行中选择数据库并设置默认值。自然,它会阻止您从命令行覆盖和使用“测试”数据库,但我认为考虑到这个问题,这有点奇怪。干杯。

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2012-06-28
    • 2015-02-20
    • 1970-01-01
    • 2019-08-09
    • 2017-01-23
    相关资源
    最近更新 更多