J'utilise mongo et des fichiers de script comme ceci:
$ mongo getSimilar.js
Je voudrais passer un argument au fichier:
$ mongo getSimilar.js apples
Puis, dans le fichier de script, récupérez l'argument transmis.
var arg = $1;
print(arg);
Utilisez --eval
et utilisez les scripts Shell pour modifier la commande transmise.
mongo --eval "print('apples');"
Ou créer des variables globales (crédit à Tad Marshall):
$ cat addthem.js
printjson( param1 + param2 );
$ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js
15
Vous ne pouvez pas faire cela, mais vous pouvez les mettre dans un autre script et le charger en premier:
// vars.js
msg = "apples";
et getSimilar.js était:
print(msg);
Ensuite:
$ mongo vars.js getSimilar.js
MongoDB Shell version: blah
connecting to: test
loading file: vars.js
loading file: getSimilar.js
apples
Pas aussi pratique, cependant.
Définir une var shell:
password='bladiebla'
Créer un script js:
cat <<EOT > mongo-create-user.js
print('drop user admin');
db.dropUser('admin');
db.createUser({
user: 'admin',
pwd: '${password}',
roles: [ 'readWrite']
});
EOT
Passer le script à mongo:
mongo mongo-create-user.js
J'ai utilisé un script Shell pour diriger une commande mongo vers mongo. Dans la commande mongo, j'ai utilisé un argument que j'ai transmis au script Shell (c'est-à-dire que j'ai utilisé $1
):
#!/bin/sh
objId=$1
EVAL="db.account.find({\"_id\" : \"$objId\"})"
echo $EVAL | mongo localhost:27718/balance_mgmt --quiet
J'ai écrit un petit utilitaire pour résoudre le problème pour moi-même. Avec l'utilitaire mongoexec
, vous pourrez exécuter la commande ./getSimilar.js apples
en ajoutant ce qui suit au début de votre script:
#!/usr/bin/mongoexec --quiet
Dans le script, vous pouvez ensuite accéder aux arguments en tant que args[0]
.
J'ai résolu ce problème en utilisant le colis javascript bundler: https://parceljs.org/
Avec cela, on peut utiliser des variables d’environnement de noeud dans un script tel que:
var collection = process.env.COLLECTION;
lors de la construction avec parcelle, la variable env est en ligne:
parcel build ./src/index.js --no-source-maps
Le seul inconvénient est que vous devez reconstruire le script à chaque fois que vous souhaitez modifier les envs vars. Mais comme le colis est très rapide, le problème ne se pose pas vraiment.