1

我想定义一个自定义的 Mongo shell 命令。给定.mongorc.js如下:

var dbuc;

(function () {
    dbuc = (function () {
        return db.getName().toUpperCase();
    })();
})();

我得到了初始数据库的正确大写名称,但是当我切换到其他数据库时,我仍然得到初始数据库的名称而不是当前数据库的名称。

> db
test
> dbuc
TEST

> use otherbase

> db
otherbase
> dbuc
TEST

我看到.mongorc.js是在运行之前mongo运行的,这就是为什么dbuc变量已经分配了初始数据库的值 - 测试。但我更想知道无论我打开什么基础,如何获取当前数据库的名称。

4

1 回答 1

1

有几点需要注意:

  • 在 mongo shell 中,typeof db是一个 javascript 对象并且typeof dbuc是字符串。
  • 我相信,在您的代码中,值被分配一次,并且在被调用dbuc时不会改变。use
  • use是一个shellHelper函数(shellHelper.use在 mongo shell 中输入)。db它使用新返回的数据库对象重新分配变量。

要工作的解决方案之一dbuc是将以下代码添加到.mongorc.js

// The first time mongo shell loads, assign the value of dbuc. 
dbuc = db.getName().toUpperCase();

shellHelper.use = function (dbname) {
    var s = "" + dbname;
    if (s == "") {
        print("bad use parameter");
        return;
    }
    db = db.getMongo().getDB(dbname);

    // After new assignment, extract and assign upper case 
    // of newly assgined db name to dbuc.
    dbuc = db.getName().toUpperCase();

    print("switched to db " + db.getName());
};
于 2016-09-13T03:54:47.303 回答