Как передать аргумент Mongo Script

Я использую файлы mongo и script следующим образом:

$ mongo getSimilar.js

Я хотел бы передать аргумент файлу:

$ mongo getSimilar.js apples

И затем в файле script выберите переданный аргумент.

var arg  = $1;
print(arg);

Ответ 1

Используйте --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

Ответ 2

Вы не можете этого сделать, но вы можете поместить их в другой script и загрузить сначала:

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

Не совсем удобно.

Ответ 3

Я использовал оболочку script для соединения команды mongo с mongo. В команде mongo я использовал arg, который я передал в оболочку script (т.е. Использовал $1):

#!/bin/sh

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

Ответ 4

Задайте оболочку var:

password='bladiebla'

Создать js script:

cat <<EOT > mongo-create-user.js
print('drop user admin');
db.dropUser('admin');
db.createUser({
user: 'admin',
pwd: '${password}',
roles: [ 'readWrite']
});
EOT

Передать script в mongo:

mongo mongo-create-user.js

Ответ 5

Я написал небольшую утилиту для решения проблемы для себя. С помощью утилиты mongoexec вы можете запустить команду ./getSimilar.js apples, добавив следующее к началу вашего script:

#!/usr/bin/mongoexec --quiet

Внутри script вы можете получить доступ к аргументам как args[0].

https://github.com/pveierland/mongoexec