Uso la sintassi "ereditaria", menzionata da David Young. Ma c'è un problema:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
Quanto sopra NON funzionerà, perché la frase "$ esiste" sarà vista dalla shell e sostituita con il valore della variabile d'ambiente chiamata "esiste". Che, probabilmente, non esiste, quindi dopo l'espansione della shell diventa:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { : true }
})
.forEach( printjson );
EOF
Per farlo passare hai due opzioni. Uno è brutto, uno è abbastanza carino. Innanzitutto, il brutto: sfuggire ai segni $:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { \$exists: true }
})
.forEach( printjson );
EOF
NON lo consiglio, perché è facile dimenticare di scappare.
L'altra opzione è quella di sfuggire all'EOF, in questo modo:
#!/usr/bin/sh
mongo <db> <<\EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
Ora puoi mettere tutti i segni del dollaro che vuoi nella tua eredità e i segni del dollaro vengono ignorati. Il lato negativo: non funziona se è necessario inserire parametri / variabili della shell nello script mongo.
Un'altra opzione con cui puoi giocare è quella di pasticciare con il tuo shebang. Per esempio,
#!/bin/env mongo
<some mongo stuff>
Esistono diversi problemi con questa soluzione:
Funziona solo se stai provando a rendere eseguibile uno script di shell mongo dalla riga di comando. Non puoi mescolare i normali comandi di shell con i comandi di shell mongo. E tutto ciò che salvi facendo così non è necessario digitare "mongo" sulla riga di comando ... (motivo abbastanza, ovviamente)
Funziona esattamente come "mongo <some-js-file>", il che significa che non ti consente di usare il comando "usa <db>".
Ho provato ad aggiungere il nome del database allo shebang, che penseresti possa funzionare. Sfortunatamente, il modo in cui il sistema elabora la linea shebang, tutto dopo il primo spazio viene passato come un singolo parametro (come se fosse citato) al comando env, e env non riesce a trovarlo ed eseguirlo.
Invece, devi incorporare la modifica del database nello script stesso, in questo modo:
#!/bin/env mongo
db = db.getSiblingDB('<db>');
<your script>
Come per qualsiasi cosa nella vita, "c'è più di un modo per farlo!"
.find()
operazioni, è necessario chiamare un'operazione sull'oggetto risultato per stampare i documenti, cometoArray()
oshellPrint()
. ad es.mongo userdb --eval "printjson(db.users.find().toArray())"