HOE PASSEN AGUMENT VOOR MONGO SCRIPT

Ik gebruik Mongo- en Script-bestanden zoals deze:

$ mongo getSimilar.js

Ik zou graag een argument aan het bestand willen doorgeven:

$ mongo getSimilar.js apples

en vervolgens in het scriptbestand ophalen het argument dat is ingevoerd.

var arg  = $1;
print(arg);

Antwoord 1, Autoriteit 100%

Gebruik --evalen gebruik Shell Scripting om de ingeschakelde opdracht te wijzigen.

mongo --eval "print('apples');"

of maak globale variabelen (tegoed aan TAD Marshall):

$ cat addthem.js
printjson( param1 + param2 );
$ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js
15

Antwoord 2, Autoriteit 23%

U kunt dat niet doen, maar u kunt ze in een ander script plaatsen en die eerst laden:

// vars.js
msg = "apples";

en getimilar.js was:

print(msg);

Dan:

$ mongo vars.js getSimilar.js
MongoDB shell version: blah
connecting to: test
loading file: vars.js
loading file: getSimilar.js
apples

Niet helemaal zo handig.


Antwoord 3, Autoriteit 2%

Stel een shell var in:

password='bladiebla'

Maak JS-script:

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

Pass-script naar Mongo:

mongo mongo-create-user.js

Antwoord 4

Ik heb een shell-script gebruikt om een ​​Mongo-opdracht aan Mongo te pijpen. In het commando van de Mongo gebruikte ik een ARG die ik heb doorgegeven aan het Shell-script (d.w.z. ik gebruikte $1):

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

Antwoord 5

Ik schreef een klein hulpprogramma om het probleem voor mezelf op te lossen. Met de mongoexecUtility zou u de opdracht ./getSimilar.js appleskunnen uitvoeren door het volgende aan het begin van uw script toe te voegen:

#!/usr/bin/mongoexec --quiet

In het script kunt u vervolgens toegang krijgen tot de argumenten als args[0].

https://github.com/pveierland/mongoexec


Antwoord 6

Ik heb dit probleem opgelost door het JavaScript Bundler-perceel te gebruiken: https://parceljs.org/

Hiermee kan men knooppuntomgevingsvariabelen gebruiken in een script zoals:

var collection = process.env.COLLECTION;

Bij het bouwen met perceel wordt de ENV var geïnlini:

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

Het enige nadeel is, dat u het script moet herbouwen telkens wanneer u de ENV VAR’s wilt wijzigen. Maar omdat het pakket echt snel is, is dit niet echt een probleem IMHO.

Other episodes