मैं "हेरेडोक" वाक्यविन्यास का उपयोग करता हूं, जिसे डेविड यंग उल्लेख करते हैं। लेकिन वहां एक जाल है:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
ऊपर काम नहीं करेगा, क्योंकि "$ मौजूद" वाक्यांश शेल द्वारा देखा जाएगा और "मौजूद है" नाम के पर्यावरण चर के मूल्य के साथ प्रतिस्थापित किया जाएगा। शेल विस्तार के बाद यह संभव नहीं है, इसलिए, यह मौजूद नहीं है:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { : true }
})
.forEach( printjson );
EOF
आपके पास से गुजरने के लिए आपके पास दो विकल्प हैं। एक बदसूरत है, एक बहुत अच्छा है। सबसे पहले, बदसूरत एक: $ संकेत बच:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { \$exists: true }
})
.forEach( printjson );
EOF
मैं इसकी अनुशंसा नहीं करता, क्योंकि बच निकलना आसान है।
अन्य विकल्प ईओएफ से बचना है, जैसे:
#!/usr/bin/sh
mongo <db> <<\EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
अब, आप उन सभी डॉलर संकेतों को रख सकते हैं जो आप अपने हेरेडोक में चाहते हैं, और डॉलर के संकेतों को अनदेखा किया गया है। नीचे की ओर: यह काम नहीं करता है यदि आपको अपनी मानदंड लिपि में शेल पैरामीटर / चर डालने की आवश्यकता है।
एक और विकल्प जिसके साथ आप खेल सकते हैं वह है आपके शेबबैंग के साथ खिलवाड़ करना। उदाहरण के लिए,
#!/bin/env mongo
<some mongo stuff>
इस समाधान के साथ कई समस्याएं हैं:
यह केवल तभी काम करता है जब आप कमांड लाइन से एक मैंगो शेल स्क्रिप्ट को निष्पादन योग्य बनाने की कोशिश कर रहे हों। आप मैंगो शेल कमांड के साथ नियमित शेल कमांड नहीं मिला सकते हैं। और ऐसा करके आप जो कुछ भी बचाते हैं, वह कमांड लाइन पर "मोंगो" टाइप करने के लिए नहीं है ... (पर्याप्त रूप से, निश्चित रूप से)
यह बिल्कुल "mongo <some-js-file>" जैसा कार्य करता है, जिसका अर्थ है कि यह आपको "उपयोग <db>" कमांड का उपयोग नहीं करने देता है।
मैंने डेटाबेस का नाम शेबंग में जोड़ने की कोशिश की है, जो आपको लगता है कि काम करेगा। दुर्भाग्य से, जिस तरह से सिस्टम शेबंग लाइन को प्रोसेस करता है, पहले स्पेस के बाद सब कुछ एक ही पैरामीटर (जैसे कि उद्धृत किया गया है) में एनवी कमांड को दिया जाता है, और एनवी इसे खोजने और चलाने में विफल रहता है।
इसके बजाय, आपको स्क्रिप्ट में ही डेटाबेस परिवर्तन को एम्बेड करना होगा, जैसे:
#!/bin/env mongo
db = db.getSiblingDB('<db>');
<your script>
जीवन में किसी भी चीज़ के साथ, "इसे करने का एक से अधिक तरीका है!"
.find()
संचालन, आप इस तरह के रूप में दस्तावेजों, मुद्रित करने के लिए परिणाम वस्तु पर एक ऑपरेशन कॉल करने की आवश्यकताtoArray()
याshellPrint()
। जैसे,mongo userdb --eval "printjson(db.users.find().toArray())"