जवाबों:
शेल कुछ अच्छा लेकिन छिपी हुई सुविधाएँ प्रदान करता है क्योंकि यह एक संवादात्मक वातावरण है।
जब आप mongo कमांड के माध्यम से एक जावास्क्रिप्ट फ़ाइल से कमांड चलाते हैं। तो आपको काफी समान व्यवहार नहीं मिलेगा।
इसके चारों ओर दो रास्ते हैं।
(1) शेल को नकली बनाना और यह सोचना कि आप इंटरैक्टिव मोड में हैं
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
या
(2) find()
एक मुद्रण योग्य JSON में परिणाम का अनुवाद करने के लिए जावास्क्रिप्ट का उपयोग करें
mongo dbname command.js > output.json
जहाँ command.js में यह (या इसके समतुल्य) शामिल हैं:
printjson( db.collection.find().toArray() )
यह सुंदर परिणाम के सरणी को प्रिंट करेगा, जिसमें [ ]
- यदि आप नहीं चाहते हैं कि आप सरणी और printjson()
प्रत्येक तत्व पर पुनरावृति कर सकते हैं ।
वैसे यदि आप केवल एक जावास्क्रिप्ट स्टेटमेंट चला रहे हैं तो आपको इसे किसी फाइल में नहीं रखना है और इसके बजाय आप इसका उपयोग कर सकते हैं:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txt
लेकिन यह मुझे दिया JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
।
जब से आप एक टर्मिनल पर यह कर रहे हैं और सिर्फ एक तरीके से एक रिकॉर्ड का निरीक्षण करना चाहते हैं, आप इस तरह से एक चाल का उपयोग कर सकते हैं:
mongo | tee somefile
सत्र को सामान्य के रूप में उपयोग करें - db.collection.find().pretty()
या आपको जो भी करने की आवश्यकता है, लंबे आउटपुट को अनदेखा करें, और बाहर निकलें। आपके सत्र की एक प्रतिलिपि फ़ाइल में होगीtee
लिखा जाएगा।
इस बात का ध्यान रखें कि आउटपुट में इंटरेक्टिव सेशन की अपेक्षा मेंगो शेल के कारण एस्केप सीक्वेंस और अन्य कचरा हो सकता है। less
इनायत संभालती है।
बस उन कमांड्स को डालें जिन्हें आप किसी फाइल में चलाना चाहते हैं, फिर इसे डेटाबेस के नाम के साथ शेल में पास करें और आउटपुट को फाइल में रीडायरेक्ट करें। इसलिए, यदि आपकी खोज कमांड में है find.js
और आपका डेटाबेस है foo
, तो यह इस तरह दिखेगा:
./mongo foo find.js >> out.json
out.json
। mongo foo < find.js > out.json
काम किया।
db.someCollection.find().pretty()
एक जावास्क्रिप्ट फ़ाइल में अपनी क्वेरी (जैसे ) डालें , आइए बताते हैं query.js
। फिर कमांड का उपयोग करके इसे अपने ऑपरेटिंग सिस्टम के शेल में चलाएं:
mongo yourDb < query.js > outputFile
क्वेरी परिणाम 'outputFile' नाम की फ़ाइल में होगा।
डिफ़ॉल्ट रूप से Mongo पहले 20 दस्तावेज़ IIRC प्रिंट करता है। यदि आप अधिक चाहते हैं तो आप मानगो शेल में बैच आकार में नए मान को परिभाषित कर सकते हैं, जैसे
DBQuery.shellBatchSize = 100
।
.js
विस्तार से गलत मत बनो । आप उन सभी अच्छे मानगो शेल प्रश्नों को बिना बदले उन्हें लिख सकते हैं।
का उपयोग कर print
और JSON.stringify
आप बस एक वैध JSON
परिणाम का उत्पादन कर सकते हैं । आउटपुट से शेल शोर को फ़िल्टर करने के लिए ध्वज का
उपयोग करें --quiet
।
मूल्यांकन --norc
से बचने के लिए ध्वज का
उपयोग करें .mongorc.js
। (मुझे इसका उपयोग एक सुंदर-फॉर्मेटर के कारण करना पड़ा जो मैं उपयोग करता हूं, जो अमान्य JSON आउटपुट का उत्पादन करता है) पेजिंग से बचने के लिए वास्तविक परिणाम की सीमा के साथ DBQuery.shellBatchSize = ?
प्रतिस्थापित करें ?
।
और अंत में, tee
टर्मिनल आउटपुट को फ़ाइल में पाइप करने के लिए उपयोग करें:
// Shell:
mongo --quiet --norc ./query.js | tee ~/my_output.json
// query.js:
DBQuery.shellBatchSize = 2000;
function toPrint(data) {
print(JSON.stringify(data, null, 2));
}
toPrint(
db.getCollection('myCollection').find().toArray()
);
उम्मीद है की यह मदद करेगा!
आसा कामस्की के इस उत्तर का उपयोग करते हुए , मैंने विंडोज के लिए एक-पंक्ति बैट स्क्रिप्ट लिखी। रेखा इस तरह दिखती है:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
फिर कोई इसे चला सकता है:
exportToJson.bat DbName CollectionName
इसके अलावा मोंगोएक्सपोर्ट है है, लेकिन मुझे यकीन नहीं है कि यह किस संस्करण में उपलब्ध है।
उदाहरण:
mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json