web-dev-qa-db-fra.com

Comment passer un argument à Mongo Script

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);
56
Brig

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

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.

17
kristina

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

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
1
Tony

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].

https://github.com/pveierland/mongoexec

0
user764486

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.

0
beac0n