2014-06-16 5 views
11

का उपयोग कर एक मोंगोडीबी डेटाबेस में सभी संग्रहों से सभी इंडेक्स ड्रॉप करें मैंने डेटाबेस को पुनर्स्थापित करने के लिए मैंगोरस्टोर का उपयोग किया है, लेकिन मुझे एक त्रुटि मिल रही है कि जब मैं अपना एप्लिकेशन चलाने की कोशिश करता हूं तो इंडेक्स पहले से मौजूद है।कमांड लाइन

मुझे फ़ंक्शन db.collection.dropIndex() के बारे में पता है, लेकिन क्या इसे स्वचालित करने और डेटाबेस में सभी संग्रहों से सभी इंडेक्स को एक बार में छोड़ने का कोई तरीका है?

मैं

db.getCollectionNames().forEach(function(col_name) { 
    var coll = db.getCollection(col_name); 
    coll.dropIndexes(); 
}); 

की कोशिश की है लेकिन वह चाल नहीं करता है। कोई विचार?

+1

फिर db.dropDatabase के साथ जाएं; आदेश अगर आप ताजा डेटाबेस से शुरू करना चाहते हैं ... !!! – RubyOnRails

उत्तर

21

आपका आदेश मेरे लिए काम करता है (यह वर्तमान में चयनित डीबी पर सभी अनुक्रमणिका को छोड़ देता है)। लेकिन आप इस विकल्प का भी उपयोग कर सकते हैं।

db.getCollectionNames().forEach(function(collName) { 
    db.runCommand({dropIndexes: collName, index: "*"}); 
}); 

जब अनुक्रमित छोड़ने केवल गैर _id अनुक्रमित गिरा दिया जाएगा।

वर्कअराउंड समाधान डेटाबेस ड्रॉप करने के लिए है और --noIndexRestore ध्वज सेट जब mongorestore साथ बहाल ताकि अनुक्रमणिका पुन: प्राप्त नहीं कर रहे हैं।

man mongorestore से

:

संस्करण 2.2 में

--noIndexRestore

नई।

संबंधित mongodump आउटपुट में निर्दिष्ट इंडेक्स को बहाल करने और निर्माण करने से mongorestore को रोकता है।

1

आप सभी संग्रह से सभी अनुक्रमित ड्रॉप करने के लिए इस आदेश का उपयोग कर सकते हैं:

db.getCollectionNames().forEach(function (d) { 
    db[d].dropIndexes(); 
}); 

इस कोशिश करो!

Reference link