2

次のように、--eval で変数を取るように Mongo スクリプトを設定しています。

mongo mydb myscript.js --eval "parameter = 'value'"

ただし、スクリプトを必要とせずにスクリプトを引き続き機能させたい--eval.

これがブラウザーベースの JS でvar internalParameter = window.parameter || nullある場合、未定義の変数をチェックすることによってスローされる ReferenceError を回避するために、ある種のことを行うだけですmongoが、 window. Mongo スクリプトでグローバル オブジェクトを介して変数にアクセスすることは可能ですか? それとも、これを try/catch でラップする必要がありますか?

4

4 に答える 4

5

一般的な JavaScript イディオムについてもう少し学んだので、次のこともできることがわかりました。

var internalParameter = typeof parameter == "undefined" ? null : parameter
于 2015-01-14T12:43:31.010 に答える
1

In myscript.js you can do:

var parameter = parameter || null;

If parameter is passed in via the --eval it will have that value, otherwise it will be null.

UPDATE

To do it without defining the input variable you can use the fact that this refers to the global object in the shell and do:

var internalParameter = this.parameter || null;
于 2013-01-11T02:31:46.967 に答える
0

はい。スクリプトは、次のようにデフォルトを設定できます。

var parameter = parameter || 'default';
print('parameter = ' + parameter);

そして、パラメータを渡すか、デフォルトのままにすることが可能です:

% mongo script.js                                           
MongoDB shell version: 2.0.7
connecting to: localhost:27017/test
parameter = default

% mongo script.js --eval "var parameter = 'something else';"
MongoDB shell version: 2.0.7
connecting to: localhost:27017/test
parameter = something else
于 2013-01-11T02:37:02.683 に答える
0

同様の問題を解決するために、次のことを行いました。

function set_param(name, default_val)
{
    if (typeof this[name] === "undefined")
        this[name] = default_val;
}

set_param("DAYS_BACK", 180);
set_param("BATCH_SIZE", 1000);

いずれかのパラメーターに--eval引数を指定すると、MongoDB シェルは指定されたものを使用します。それ以外の場合は、 の 2 番目の引数によって提供されるデフォルトが使用されますset_param()。の最初の引数として名前が指定された変数は、set_param()一度使用しても安全set_param()であり、 の使用に関係なく実行されます--eval

于 2016-12-27T18:45:38.550 に答える