2012-07-23 4 views
15

का उपयोग कर 1 से अधिक जेसन फ़ाइल आयात करें मैं mongodb पर नया हूं और एक सर्वर से दूसरे सर्वर पर json फ़ाइल आयात करने के बारे में जानना चाहता हूं। मैंने निम्न आदेश mongoimport -d test -c bik check.json को आजमाया और यह मेरे लिए ठीक काम करता है। अब मैं जानना चाहता हूं कि कई json फाइलें हैं, मैं उन्हें एक ही बार में कैसे आयात करूं। मुझे कोई संबंधित दस्तावेज़ नहीं मिला जहां यह लिखा गया है यह संभव नहीं है। कृपया मेरी मदद करें यह संभव है औरmongoimport

उत्तर

17

आप हमेशा कुछ खोल स्क्रिप्ट लिख सकते हैं।

colls=(mycoll1 mycoll2 mycoll5) 

for c in ${colls[@]} 
do 
    mongoimport -d mydb -c $c.json 
done 
+0

धन्यवाद जादू जादू – user850234

+2

बस एक प्रश्न है। क्या निर्देशिका नाम को परिभाषित करना संभव नहीं है और फ़ाइल नाम निर्दिष्ट करने के बजाय सभी 'json' फ़ाइलों को आयात करने के लिए निर्देशिका का पथ निर्दिष्ट करें। ऐसा इसलिए है क्योंकि अगर कई फाइलें हैं तो हमें सभी फाइलनामों को निर्दिष्ट करना होगा और फिर 'लूप' करना होगा जो प्रत्येक फाइल के लिए 'mongoimport' कमांड मैन्युअल रूप से करने जैसा है। क्या यह अधिक गतिशील रूप से किया जा सकता है? – user850234

+0

मैंने कोशिश की और यह काम नहीं किया। हालांकि, यह 'mongorestore' के साथ काम करता है। –

17

मैं स्वचालित रूप से सभी संग्रह आयात करने के लिए एक और अधिक सुरुचिपूर्ण तरीका के साथ आया था:

ls -1 *.json | sed 's/.json$//' | while read col; do 
    mongoimport -d db_name -c $col < $col.json; 
done 

मुझे आशा है कि यह उपयोगी है।

+0

एक आकर्षण की तरह काम किया था! मुझे वास्तव में tsv फ़ाइलों को आयात करने की आवश्यकता थी, इसलिए मुझे '--headerline' और '--type tsv' बहुत सरल शामिल करना था। धन्यवाद – agarcian

13

विंडोज बैच संस्करण:

@echo off 
for %%f in (*.json) do (
    "mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json 
) 
+0

धन्यवाद टॉमी। मुझे - jsonArray को छोड़ना पड़ा क्योंकि मेरे पास एकाधिक जेसन फाइलें थीं जो [] में संलग्न नहीं थीं – ankit9j

0

इस Mac OS X

find . -regex '.*/[^/]*.json' | xargs -L 1 mongoimport --db DB_NAME -u USER_NAME -p PASSWORD --collection COLLECTION_NAME --file 
0

में मेरे लिए काम किया खिड़कियों बल्ला फ़ाइल के लिए। यदि आपके पास फ़ोल्डर में जेसन फाइलों की एक सूची है तो यह बेहतर होगा।

for filename in *; do mongoimport --db <Database> --collection <Collection Name> --file $filename; done 
1

में नाम आप इस तरह से भी से यह कर सकते हैं से मेल खाता है यह मैक में भी काम करता है)।

आपके पास एक ही फ़ोल्डर में सभी जेसन फ़ाइलें होनी चाहिए और फ़ाइल का नाम संग्रह होना चाहिए जो आपके डेटाबेस में आयात किया जाएगा।

तो, चलिए शुरू करें, उस फ़ोल्डर को खोलें जिसमें आपकी जेसन फाइलें हों। अपने डेटाबेस नाम के <DATABASE> बदलें, तो नीचे लाइन निष्पादित करें:

for collection in $(ls | cut -d'.' -f1); do mongoimport --db <DATABASE> --collection ${collection} --file ${collection}.json; done

लेकिन वहाँ क्या चल रहा है?

सबसे पहले, आपको यह ध्यान रखना होगा कि कोष्ठक पहले निष्पादित किए जाएंगे। इस मामले में, यह प्रत्येक फाइल का नाम प्राप्त करने वाली सभी फ़ाइलों की एक सूची बनाता है (इसका विस्तार हटा रहा है)।

दूसरे, सब सूची एक स्थानीय चर कहा संग्रह में "के लिए" एक पाश में जोड़ दिया जाएगा

तीसरा, "do" आयात लाइन पर अमल (इस वेरिएबल का नाम कुछ भी आप चाहते हैं हो सकता है) (*)

अंत में "किया गया", लूप खत्म करें।

(*) आयात लाइन "mongoimport" द्वारा रचित है जिसके लिए डेटाबेस नाम "--db", संग्रह नाम "--collection", और फ़ाइल नाम "--file" की आवश्यकता होती है। इन आवश्यकताओं को "के लिए" सामग्री पर बनाए गए चर "$ संग्रह" द्वारा भर दिया गया है

मुझे उम्मीद है कि किसी की मदद की जाएगी!शुभकामनाएं दोस्तों :)

0

मैं कितने संग्रह कुशलता से केवल लिनक्स के टर्मिनल का उपयोग कर आयात करने के लिए (दिखाने जा रहा हूँ: और संग्रह नाम फ़ाइलों

@echo off 
for %%f in (*.json) do (
    "mongoimport.exe" --db databasename --collection %%~nf --drop --file %%f 
) 
pause