私は次のようなmongoファイルとスクリプトファイルを使用しています。
$ mongo getSimilar.js
ファイルに引数を渡したいのですが:
$ mongo getSimilar.js apples
次に、スクリプトファイルで、渡された引数を取得します。
var arg = $1;
print(arg);
私は次のような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バンドラーパーセルを使用してこの問題を解決しました:https ://parceljs.org/
これにより、次のようなスクリプトでノード環境変数を使用できます。
var collection = process.env.COLLECTION;
区画を使用してビルドすると、env変数がインライン化されます。
parcel build ./src/index.js --no-source-maps
唯一の欠点は、env変数を変更するたびにスクリプトを再構築する必要があることです。しかし、小包は本当に速いので、これは実際には問題ではありません。
2022年の更新:
使用mongosh
する場合は、から実行引数を読み取ることができますprocess.argv
mongosh script.js param1 param2
// process.argv will be [.... , 'param1', param2']
トリッキーな点はmongosh
、パラメータ(たとえばparam1
、param2
)を追加のスクリプトとして実行しようとすることですが、これは、を使用してスクリプトを終了することで防ぐことができますquit()
。(TBH、それが設計によるものか、意図されたものか、文書化されたものかはわかりません)