1

カスタムの 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変数に初期データベースの値が割り当てられています-テスト. しかし、私がオンにしたベースが何であれ、現在のデータベースの名前を取得する方法が気になります。

4

1 に答える 1

1

注意すべき点がいくつかあります。

  • mongo シェルでtypeof dbは、javascript オブジェクトであり、typeof dbuc文字列です。
  • あなたのコードでは、値が一度割り当てられ、呼び出されdbucても変更されないと思います。use
  • useshellHelper関数です(mongoシェルのタイプ)shellHelper.usedb新しく返されたデータベース オブジェクトで変数を再割り当てします。

解決策の 1 つは、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 に答える