私はmongoと次のようなスクリプトファイルを使用しています:
$ mongo getSimilar.js
ファイルに引数を渡したい:
$ mongo getSimilar.js apples
そして、スクリプトファイルで、渡された引数を選択します。
var arg = $1;
print(arg);
_--eval
_を使用し、シェルスクリプトを使用して、渡されたコマンドを変更します。
mongo --eval "print('apples');"
または、グローバル変数を作成します(Tad Marshallの功績):
_$ cat addthem.js
printjson( param1 + param2 );
$ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js
15
_
それはできませんが、別のスクリプトに入れて最初に読み込むことができます。
// vars.js
msg = "apples";
getSimilar.jsは次のとおりです。
print(msg);
次に:
$ mongo vars.js getSimilar.js
MongoDB Shell version: blah
connecting to: test
loading file: vars.js
loading file: getSimilar.js
apples
ただし、それほど便利ではありません。
シェル変数を設定します。
password='bladiebla'
Jsスクリプトを作成します。
cat <<EOT > mongo-create-user.js
print('drop user admin');
db.dropUser('admin');
db.createUser({
user: 'admin',
pwd: '${password}',
roles: [ 'readWrite']
});
EOT
スクリプトをmongoに渡します。
mongo mongo-create-user.js
シェルスクリプトを使用して、mongoコマンドをmongoにパイプしました。 mongoコマンドでは、シェルスクリプトに渡した引数を使用しました(つまり、$1
):
#!/bin/sh
objId=$1
EVAL="db.account.find({\"_id\" : \"$objId\"})"
echo $EVAL | mongo localhost:27718/balance_mgmt --quiet
この問題を自分で解決するための小さなユーティリティを作成しました。 mongoexec
ユーティリティを使用すると、スクリプトの先頭に次を追加することで、コマンド./getSimilar.js apples
を実行できます。
#!/usr/bin/mongoexec --quiet
スクリプト内で、args[0]
として引数にアクセスできます。
Javascript bundlerパーセルを使用して、この問題を解決しました: https://parceljs.org/
これにより、次のようなスクリプトでノード環境変数を使用できます。
var collection = process.env.COLLECTION;
パーセルでビルドする場合、env変数はインライン化されます:
parcel build ./src/index.js --no-source-maps
唯一の欠点は、env変数を変更するたびにスクリプトを再構築する必要があることです。しかし、小包は本当に速いので、これは実際に問題ではありません。