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');

由于Mongo
4.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")