2

我正在设置一个 Mongo 脚本以通过 --eval 获取变量,如下所示:

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

在 myscript.js 中,您可以执行以下操作:

var parameter = parameter || null;

如果parameter通过 传入,--eval它将具有该值,否则将为null.

更新

要在不定义输入变量的情况下执行此操作,您可以使用this引用 shell 中的全局对象的事实并执行以下操作:

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 shell 将使用提供的参数。否则它将使用第二个参数提供的默认值set_param()。无论set_param()使用. _set_param()--eval

于 2016-12-27T18:45:38.550 回答