MongoDB हर डेटाबेस को गिराता है


97

मैं जानना चाहूंगा कि क्या मेरे मोंगोडीबी से हर डेटाबेस को गिराने की आज्ञा है?

मुझे पता है कि अगर मैं केवल एक डेटाटेबल को छोड़ना चाहता हूं, तो मुझे बस नीचे दिए गए कोड की तरह डेटाबेस का नाम लिखना होगा लेकिन मैं इसे निर्दिष्ट नहीं करना चाहता।

mongo DB_NAME --eval 'db.dropDatabase();'

जवाबों:


142

आप एक जावास्क्रिप्ट लूप बना सकते हैं जो काम करते हैं और फिर इसे मोंगोकॉन कंसोल में निष्पादित करते हैं।

var dbs = db.getMongo().getDBNames()
for(var i in dbs){
    db = db.getMongo().getDB( dbs[i] );
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}

इसे dropall.js में सहेजें और फिर निष्पादित करें:

mongo dropall.js

13
var mongo = db.getMongo(); mongo.getDBNames().forEach(function (dbname) { var db = mongo.getDB(dbname); db.dropDatabase(); });
tjmehta

3
आप बस कोड के ऊपर पेस्ट कॉपी कर सकते हैं और इसे mongo कंसोल पर टाइप कर सकते हैं।
विवेक पांडेय

2
इसने मेरे सिस्टम डेटाबेस (मानगो संस्करण 2.4.3) को छोड़ दिया। मुझे इसे फिर से काम करने के लिए मोंगोडब प्रक्रिया को फिर से शुरू करना पड़ा।
फेलिक्स श्मिट

7
मुझे लगता है कि जब कोई अपने डेटाबेस को गिराना चाहता है तो वे व्यवस्थापक और स्थानीय जैसे आंतरिक डेटाबेस को गिराना नहीं चाहते हैं।
carlin.scott

इसके अलावा, कॉन्फ़िगरेशन डेटाबेस, जहां लेनदेन संग्रहीत हैं।
रॉड्रिगो परेरा फ्रागा

103

इस आदेश का प्रयास करें:

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'

1
महान काम करता है, और आपको इसके लिए एक js फ़ाइल बनाने की आवश्यकता नहीं है। अच्छा लगा।
एरिक होन

इसे लोड करने के लिए सहानुभूति क्या है?
nha

इस दृष्टिकोण के साथ एक मुद्दा जो मुझे अभी पता चला है कि db var mongo कंसोल सत्र के माध्यम से बना रहता है, इसलिए यदि कोई डेटाबेस में से किसी एक के साथ बातचीत कर रहा था, तो इसे db.getSiblingDB कॉल द्वारा बाहर रखा जाएगा।
carlin.scott

3
अच्छा लगा। यह docker exec mongodb sh -c "mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'"
डॉकटर के

मैं उसी मुद्दे से गुजरा और मुझे पता चला कि यह ऑटोमेशन कार्यों के लिए सबसे अच्छा समाधान है। आप नई फाइलें लिखने और एक CI / CD पाइपलाइन में डाउनलोड करने के लिए उत्सुक नहीं हैं, इसलिए एक लाइनर स्क्रिप्ट को प्रबंधित करना बहुत सरल है
कार्माइन इंगाल्डी

21

आप इसे एक साधारण मानदंड कमांड के साथ भी कर सकते हैं:

db.adminCommand("listDatabases").databases.forEach( function (d) {
    if (d.name != "local" && d.name != "admin"  && d.name != "apiomat"  && d.name != "config")
        db.getSiblingDB(d.name).dropDatabase();
 })

हर DB के लिए अगर कोई शर्त है तो लिखने के बजाय, हम एक सरणी में सरल और एक indexOf कर सकते हैं।
सचिन गुप्ता

5

सुविधा के लिए @ ALoR के उत्तर में जोड़ना, आप निम्नलिखित को ~ / .mongorc.js में डाल सकते हैं

function dropDatabases(){
    var mongo = db.getMongo();

    var dbNames = mongo.getDBNames();
    for (var i = 0; i < dbNames.length; i++) {
        var db = mongo.getDB( dbNames[i] );

        print( "Dropping database " + db.getName() + "..." );
        db.dropDatabase();
    }
}

फिर मोंगो शेल में आप बस कर सकते हैं

dropDatabases()

डॉक्स से:

मोंगो को आंनदित करने वाले यूजर की होम डायरेक्टरी से मोंगो .mongorc.js फाइल पढ़ेगा। फ़ाइल में, उपयोगकर्ता वेरिएबल्स को परिभाषित कर सकते हैं, मोंगो शेल प्रॉम्प्ट को कस्टमाइज़ कर सकते हैं या ऐसी जानकारी को अपडेट कर सकते हैं, जिसे वे हर बार शेल लॉन्च करने के बाद अपडेट करना चाहेंगे।


मैंने मुद्दों को सही करने के लिए अपडेट किए हैं। में chiming के लिए धन्यवाद!
btiernay

5

इसे drop_all_dbs.js पर सहेजें:

var databases = db.getMongo().getDBNames()
for(var i in databases){
    db = db.getMongo().getDB( databases[i] );
    if(db.getName() == "admin" || db.getName() == "local"){
        print("skipping db " + db.getName())
        continue
    }
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}

अब आप निष्पादित कर सकते हैं:

mongo drop_all_dbs.js

और सभी डेटाबेस (व्यवस्थापक और स्थानीय को छोड़कर) को छोड़ दिया जाएगा।

यह उत्तर ALoR के एक की एक प्रति है, जो सिस्टम dbs की सिर्फ एक बूंद को ठीक करता है


4

आप इसे सी # आधिकारिक ड्राइवर के माध्यम से आसान कर सकते हैं:

var _mongoServer = MongoServer.Create("mongodb://localhost:27020");

var names = _mongoServer.GetDatabaseNames();
foreach (var name in names)
{
   _mongoServer.DropDatabase(name);
}

हाँ, यह एक विचार हो सकता है, लेकिन मैं इसे बिना C # करना चाहता हूं। (ओह क्षमा करें, मैंने इस प्रश्न के लिए टैग # का उपयोग किया)
जॉन

आप एक जावास्क्रिप्ट लूप बना सकते हैं जो काम करते हैं और फिर इसे मोंगोकॉन कंसोल में निष्पादित करते हैं।
20

2
@AndrewOrsich और @JohnSmith मैंने स्क्रिप्ट पोस्ट की है।
ALoR

1

var mongo = db.getMongo(); mongo.getDBNames().filter(n => n != 'admin' && n != 'local' && n != 'config').forEach(function (dbname) { var db = mongo.getDB(dbname); db.dropDatabase(); });

यह एक कॉपी और mongoshell पर निष्पादित करने के लिए सुरक्षित है। उपरोक्त सभी उत्तरों का श्रेय बस 'कॉन्फ़िगर' डेटाबेस को भी बाहर रखें।


-2

यह जितना आसान है

mongo --eval 'db.dropDatabase()'

या, आप अपने टर्मिनल पर एक मोंगो सत्र शुरू कर सकते हैं और लिख सकते हैं

db.dropDatabase()

जो बिलकुल एक जैसा हो।


सवाल यह है कि सभी डेटाबेस को कैसे छोड़ा जाए, एक व्यक्ति को नहीं
रोब एच।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.