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());
}