developer tip

Mongo Script에 인수를 전달하는 방법

copycodes 2020. 11. 27. 08:21
반응형

Mongo Script에 인수를 전달하는 방법


다음과 같은 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

I wrote a small utility to solve the problem for myself. With the mongoexec utility, you would be able to run the command ./getSimilar.js apples by adding the following to the beginning of your script:

#!/usr/bin/mongoexec --quiet

Within the script, you can then access the arguments as args[0].

https://github.com/pveierland/mongoexec


I solved this problem, by using the javascript bundler parcel: https://parceljs.org/

With this, one can use node environment variables in a script like:

var collection = process.env.COLLECTION;

when building with parcel, the env var gets inlined:

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

The only downside is, that you have to rebuild the script every time you want to change the env vars. But since parcel is really fast, this is not really a problem imho.

참고URL : https://stackoverflow.com/questions/10114355/how-to-pass-argument-to-mongo-script

반응형