在Mongo shell中使用未定义的变量

时间:2013-01-11 02:21:40

标签: mongodb mongo-shell

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

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

但是,我希望脚本仍能正常工作而不需要--eval

如果这是基于浏览器的JS,我只是通过检查未定义的变量来做一个var internalParameter = window.parameter || null类的事情来绕过引发的ReferenceError,但mongo没有window 1}}。是否可以通过Mongo脚本中的全局对象访问变量,或者我只需将其包装在try / catch中?

4 个答案:

答案 0 :(得分:4)

现在我已经了解了常见的JavaScript惯用语,我知道你也可以这样做:

var internalParameter = typeof parameter == "undefined" ? null : parameter

答案 1 :(得分:1)

在myscript.js中你可以这样做:

var parameter = parameter || null;

如果parameter通过--eval传递,则会有{I},否则会null

<强>更新

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

var internalParameter = this.parameter || null;

答案 2 :(得分: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

答案 3 :(得分: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的第一个参数给出的变量都可以安全使用。