MongoDB: Пользовательская команда, определенная в.mongorc.js

Я хотел бы определить пользовательскую команду оболочки Mongo. Дано .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 переменной присвоено значение исходной базы данных - test. Но я довольно удивляюсь, как получить имя текущей базы данных, какую бы базу я не включил.

1 ответ

Решение

Есть несколько вещей, на которые стоит обратить внимание:

  • В оболочке монго, typeof db это объект JavaScript и typeof dbuc это строка
  • Я полагаю, в вашем коде, dbuc значение присваивается один раз и не изменяется при use называется.
  • use это shellHelper Функция (тип shellHelper.use в оболочке монго). Переназначает переменную 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());

 }
Другие вопросы по тегам