我想将名为file_path的环境变量传递给js文件.我使用以下语法 mongo --eval"var file_path ='$ file_path'"<aggregation.js
输出:MongoDB shell版本:3.2.9-rc0连接到:test
注意:它不执行aggregation.js文件.只有它通过了论证.
Kar*_*n B 13
这对我有用:
mongo --eval "var my_var = '$MY_VAR'" my_script.js
Run Code Online (Sandbox Code Playgroud)
遗漏了<. mongo将处理命令行上的任何剩余参数作为要执行/解释的文件,但显然组合shell输入重定向--eval会导致javascript命名空间被重置.
我假设但无法确认这是因为作为参数传递的文件名是通过load()机制处理的,根据https://docs.mongodb.com/v3.2/reference/method/load/,其行为如下:
在使用load()执行文件后,您可以引用从mongo shell环境定义文件的任何函数或变量.
貌似shellGetEnv()同时添加了Native Method,参见MongoDB GitHub
功能可用(感谢@orgads):
_getEnv("PATH")
Run Code Online (Sandbox Code Playgroud)
但是,它没有记录在案,也没有声明它是否可以由最终用户使用或仅作为内部命令。
新的 MongoDB Shellmongosh是一个功能齐全的 JavaScript 和Node.js 14.x REPL 环境,因此您可以使用 访问环境变量process.env,例如
process.env["PATH"]
Run Code Online (Sandbox Code Playgroud)
小智 5
由于 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`)
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
db.createCollection("myCol",
{ capped: true,
size: getEnvValue('MYCOL_MAX_SIZE_GB', 2)*1024*1024*1024
});
Run Code Online (Sandbox Code Playgroud)
这依赖于主机外壳,但在我的情况下是可以接受的(Docker)。
还试图environ直接阅读:
cat('/proc/self/environ').split('\0') # Doesn't work
Run Code Online (Sandbox Code Playgroud)
但它只获取第一个变量。我猜是因为空字符......
根据这个 commit,看起来有一个本机方法_getEnv()可以为你做这件事。
const username = _getEnv('DB_USERNAME')
const password = _getEnv('DB_PASSWORD')
// use the username and password
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4751 次 |
| 最近记录: |