Mongodb 如何将环境变量传递给mongo脚本
我想将名为Mongodb 如何将环境变量传递给mongo脚本,mongodb,shell,Mongodb,Shell,我想将名为file\u path的环境变量传递给js文件 我使用以下语法: mongo --eval "var file_path='$file_path'" < aggregation.js 注意: 它不执行aggregation.js文件。 只有它通过了论证。这对我来说很有效: mongo --eval "var my_var = '$MY_VAR'" my_script.js 省略mongo有一个建议: 然后在~/mongorc.js中: var env = {}; load('
file\u path
的环境变量传递给js文件
我使用以下语法:
mongo --eval "var file_path='$file_path'" < aggregation.js
注意:
它不执行aggregation.js
文件。
只有它通过了论证。这对我来说很有效:
mongo --eval "var my_var = '$MY_VAR'" my_script.js
省略
mongo有一个建议:
然后在~/mongorc.js
中:
var env = {};
load('shell.js');
由于Mongo4.0.5
可以利用一些新的管理功能来加载文本文件和执行程序。
因此,您可以编写Javascript函数来执行提供环境变量值的shell脚本:
function getEnvValue(envVar, defVal) {
var ret= run("sh", "-c", `printenv ${envVar} >/tmp/${envVar}.txt`);
if (ret != 0) return defVal;
return cat(`/tmp/${envVar}.txt`)
}
然后像这样使用它:
db.createCollection("myCol",
{ capped: true,
size: getEnvValue('MYCOL_MAX_SIZE_GB', 2)*1024*1024*1024
});
这依赖于主机shell,但在我的情况下是可以接受的(Docker)
还试图直接阅读环境
:
cat('/proc/self/environ').split('\0') # Doesn't work
但它只得到第一个变量。我猜是因为空字符…看起来像是同时添加了本机方法shellGetEnv()
,请参阅
所以,这很简单
shellGetEnv("file_path")
但是,该方法没有文档记录,并且看起来无法从MongoShell访问它。它可能在未来的版本中可用。根据,似乎有一个名为\u getEnv()
的本机方法可以为您执行此操作
const username=\u getEnv('DB\u username'))
常量密码=_getEnv('DB_password'))
//使用用户名和密码
如果有人对mongo不支持这一点感到惊讶,那么这里有一个请求:我使用了您的方法,但为了避免换行,我不得不在printenv中使用--null参数printenv--null${envVar}>/tmp/${envVar}.txt
run()
似乎没有文档记录,请参见您认为使用它可以保存吗?函数名为\u getEnv
shellGetEnv
是本机实现。
cat('/proc/self/environ').split('\0') # Doesn't work
shellGetEnv("file_path")