Passare le variabili della shell bash in un comando mongo shell - bash, mongodb

Sto cercando di eseguire una shell bash che chiama la shell mongo con un comando creato dinamicamente. La shell bash ha questo aspetto:

#!/bin/bash

TODAY=`date "+%Y-%m-%d"`

CMD=" "printjson(db.collection.aggregate([{$match:{processedtime:{$gte:"$TODAY"}}},{$project:{_id:$field",count:{$sum:1}}}]))""

echo "CMD: $CMD"

mongo host/mdb --eval $CMD

Si noti che il campo elaborato nella raccolta è un valore di puntura formattato come oggetto ISODate.

Quando eseguito come shell bash ottengo un errore "ILLEGAL inaspettato di token". Se eseguo il comando echeggiato sullo schermo ottengo i risultati desiderati.

La mia domanda è: esiste un modo per passare variabili shell definite nella shell mongo e se c'è qualcosa di cui ho bisogno di cambiare per farlo?

risposte:

2 per risposta № 1

Ti ricordi di fuggire abbastanza, e credo che tu non voglia le citazioni letterali singole:

CMD="printjson(db.collection.aggregate([{$match:{processedtime:{$gte:"$TODAY"}}},{$project:{_id:$field",count:{$sum:1}}}]))"
# ...^.. single quote unneeded ..........^.......................^.....^.......&......^..............^...............^............^
mongo host/mdb --eval "$CMD"
# ....................^....^  crucial double quotes here

domande correlate
Menu