web-dev-qa-db-ja.com

Mongo Scriptに引数を渡す方法

私はmongoと次のようなスクリプトファイルを使用しています:

$ mongo getSimilar.js

ファイルに引数を渡したい:

$ mongo getSimilar.js apples

そして、スクリプトファイルで、渡された引数を選択します。

var arg  = $1;
print(arg);
60
Brig

_--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
_
102
jcollum

それはできませんが、別のスクリプトに入れて最初に読み込むことができます。

// 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

ただし、それほど便利ではありません。

20
kristina

シェル変数を設定します。

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
2
robodo

シェルスクリプトを使用して、mongoコマンドをmongoにパイプしました。 mongoコマンドでは、シェルスクリプトに渡した引数を使用しました(つまり、$1):

#!/bin/sh

objId=$1
EVAL="db.account.find({\"_id\" : \"$objId\"})"
echo $EVAL | mongo localhost:27718/balance_mgmt --quiet
1
Tony

この問題を自分で解決するための小さなユーティリティを作成しました。 mongoexecユーティリティを使用すると、スクリプトの先頭に次を追加することで、コマンド./getSimilar.js applesを実行できます。

#!/usr/bin/mongoexec --quiet

スクリプト内で、args[0]として引数にアクセスできます。

https://github.com/pveierland/mongoexec

0
user764486

Javascript bundlerパーセルを使用して、この問題を解決しました: https://parceljs.org/

これにより、次のようなスクリプトでノード環境変数を使用できます。

var collection = process.env.COLLECTION;

パーセルでビルドする場合、env変数はインライン化されます:

parcel build ./src/index.js --no-source-maps

唯一の欠点は、env変数を変更するたびにスクリプトを再構築する必要があることです。しかし、小包は本当に速いので、これは実際に問題ではありません。

0
beac0n