web-dev-qa-db-ja.com

環境変数をmongoスクリプトに渡す方法

file_pathという名前の環境変数をjsファイルに渡したい。

私は次の構文を使用しています:

mongo --eval "var file_path='$file_path'" < aggregation.js

出力:

MongoDB Shell version: 3.2.9-rc0
connecting to: test

注:

aggregation.jsファイルは実行されません。それだけが引数を渡します。

12

これは私のために働いた:

_mongo --eval "var my_var = '$MY_VAR'" my_script.js
_

_<_は省略してください。 mongoは、コマンドラインの残りの引数を実行/解釈されるファイルとして処理しますが、シェル入力リダイレクトを_--eval_と組み合わせると、javascript名前空間がリセットされるようです。

これは、引数として渡されたファイル名がload()メカニズムを介して処理されるためだと思いますが、確認できません。これは、 https://docs.mongodb.com/v3.2/reference/method/load / 、次のように動作します。

Load()を使用してファイルを実行した後、mongoシェル環境からファイルを定義した関数または変数を参照できます。

12
Karen B

モンゴからの提案があります 変更リクエスト

alias mongo="export | sed 's/declare -x /env./' > Shell.js; mongo $@; rm Shell.js;"

次に~/mongorc.js

var env = {};
load('Shell.js');
0
Matthew

Mongo以降4.0.5新しい管理機能のいくつかを利用して、テキストファイルをロードし、プログラムを実行することができます。私は次の関数に行き着きました:

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

これはホストシェルに依存していますが、私の場合(docker)は受け入れられました。

また、environを直接読み取ろうとしていました:

cat('/proc/self/environ').split('\0') # Doesn't work

ただし、最初の変数のみを取得します。ヌル文字のせいだと思います...

0
Premik