एक मोंगो खोल कमांड में बैश खोल चर को पास करना - बैश, mongodb

मैं एक बैश खोल निष्पादित करने की कोशिश कर रहा हूं जो मोंगो खोल को गतिशील रूप से बनाए गए कमांड के साथ कॉल करता है। बैश खोल इस तरह दिखता है:

#!/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

नोट करें संग्रह में संसाधित समय फ़ील्ड एक स्टिंग मान है जो एक ISODate ऑब्जेक्ट के रूप में स्वरूपित है।

जब एक बैश खोल के रूप में निष्पादित किया जाता है तो मुझे "अप्रत्याशित टोकन ILLEGAL" त्रुटि मिलती है। यदि मैं स्क्रीन पर प्रतिबिंबित आदेश निष्पादित करता हूं तो मुझे वांछित परिणाम मिलते हैं।

मेरा सवाल यह है कि क्या मोंगो शैल में शैल परिभाषित चरों को पारित करने का कोई तरीका है और यदि ऐसा करने के लिए मुझे क्या करने की ज़रूरत है?

उत्तर:

जवाब के लिए 2 № 1

आप "पर्याप्त भागने से नोट कर रहे हैं, और मेरा मानना ​​है कि आप शाब्दिक एकल उद्धरण नहीं चाहते हैं:

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

संबंधित सवाल
सबसे लोकप्रिय