我正在设置一个Mongo脚本来通过--eval获取变量,如下所示:
mongo mydb myscript.js --eval "parameter = 'value'"
但是,我希望脚本仍能正常工作而不需要--eval
。
如果这是基于浏览器的JS,我只是通过检查未定义的变量来做一个var internalParameter = window.parameter || null
类的事情来绕过引发的ReferenceError,但mongo
没有window
1}}。是否可以通过Mongo脚本中的全局对象访问变量,或者我只需将其包装在try / catch中?
答案 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
的第一个参数给出的变量都可以安全使用。