एक MongoDB डेटाबेस में सब कुछ हटा दें


454

मैं MongoDB पर विकास कर रहा हूं। पूरी तरह से गैर-दुष्ट उद्देश्यों के लिए, मैं कभी-कभी एक डेटाबेस में सब कुछ उड़ाना चाहता हूं - अर्थात्, हर एक संग्रह को हटाना, और जो कुछ भी आसपास पड़ा हो, और खरोंच से शुरू हो। क्या कोड की एक भी लाइन है जो मुझे ऐसा करने देगी? एक MongoDB कंसोल विधि और एक MongoDB रूबी ड्राइवर विधि दोनों देने के लिए बोनस अंक।

जवाबों:


588

मेंगो खोल:

use [database];
db.dropDatabase();

और उपयोगकर्ताओं को निकालने के लिए:

db.dropAllUsers();

23
@connorbode को इसके लिए धन्यवाद। मैंने इसे पढ़ा है और तुरंत हालांकि: "बी-बट ओपी डेटाबेस को हटाना नहीं चाहता है!" । बहुत भ्रामक आदेश !!
हेनरिक मिरांडा

सावधानी के साथ उपयोग करें: यदि आप वायर्डटाइगर का उपयोग करते हुए एक शार्प किए गए वातावरण में हैं और आपके पास कोई उपयोगकर्ता डेटाबेस नहीं है और आप ड्रॉपडॉटबेस का उपयोग करते हैं, तो डेटाबेस को हटा दिया जाएगा और नए रिकॉर्ड्स को जोड़ने पर एक अलग शार्क पर प्राथमिक के रूप में फिर से प्रकट हो सकता है।
जेसन आर। Coombs

2
यह संबंधित डेटाबेस से जुड़े उपयोगकर्ता को नहीं हटाएगा। इसलिए आप इसे मैन्युअल रूप से हटाना चाहते हैं। db.dropAllUsers();
फ्रात K FK

2
ध्यान दें कि डेटाबेस "यूज़ डीबीएस" कमांड का उपयोग करने के बाद नहीं दिखाएगा। हालाँकि, यह वहाँ है। तो, कोई चिंता नहीं।
व्यानशाफ्ट

@StepanYakovenko शायद MongoDB उदाहरण के साथ प्रमाणित करने की आवश्यकता है
जोश K

114

इसके अलावा, कमांड लाइन से:

mongo DATABASE_NAME --eval "db.dropDatabase();"

5
मुझे विश्वास नहीं है कि यह 2.4.6 में काम करता है। मेरे रिकॉर्ड अभी भी मौजूद हैं।
ब्रैंडन क्लार्क

क्या यह डेटाबेस पर उपयोगकर्ताओं को भी दूरस्थ करेगा?
गर्ट वैन डेन बर्ग

67

मुझे एक ही समस्या थी, जब मुझे सभी संग्रह को रीसेट करने की आवश्यकता थी, लेकिन किसी भी डेटाबेस उपयोगकर्ताओं को ढीला नहीं करना चाहता था। यदि आप डेटाबेस के लिए उपयोगकर्ता कॉन्फ़िगरेशन को सहेजना चाहते हैं, तो कोड की निम्न पंक्ति का उपयोग करें:

use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })

यह कोड एक डेटाबेस से सभी संग्रह नामों के माध्यम से जाएगा और उन लोगों को छोड़ देगा जो "सिस्टम" के साथ शुरू नहीं करते हैं।


2
जैसा कि @DHH द्वारा बताया गया है कि आप इसके removeस्थान पर उपयोग करने के लिए अधिक विश्वसनीय हो सकते हैं dropremoveविकल्प खेतों संग्रह जिसे आप साफ़ कर रहे हैं पर बाधाओं बनाए रखने के लिए प्रकट होता है। जब हमने dropविधि को नियोजित किया , तो uniqueहमारे एक क्षेत्र पर बाधा को ड्रॉप के बाद सम्मानित नहीं किया गया था।
स्कॉट्टीमैक

@Sctymac - बेहतर अभी तक, के बजाय एक elseशाखा ( if (c.indexOf("system.") == -1)) को जोड़ें । इस तरह आप खाली संग्रह के साथ नहीं रह गए हैं यदि आप उन्हें अब उपयोग नहीं कर रहे हैंremovedrop
बोगदान डी

1
इससे बेहतर db[c], वह उपयोग करें db.getCollection(c)जो संग्रह नाम अंकों के होने पर त्रुटियों से बचा जाता है ।
जेसन आर। कोम्बस

1
डॉक्स के अनुसार , MongoDB 2.6 के बाद से, एक ड्रॉपडाबेस कमांड उपयोगकर्ताओं को नहीं हटाएगा, इसलिए स्वीकृत उत्तर शायद बेहतर है।
जेसन आर। कोमब्स

1
यदि संग्रह का नाम संख्यात्मक है, तो इसके बजाय काम करना चाहिए:db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
कांस्टेंटिन गैलबेनु

35

मैंने db.dropDatabase()लंबे समय तक मार्ग का अनुसरण किया , हालांकि यदि आप डेटाबेस को परीक्षण के मामलों के बीच डेटाबेस को पोंछने के लिए इसका उपयोग करने का प्रयास कर रहे हैं, तो आप अंततः डेटाबेस की गिरावट के बाद सम्मानित नहीं होने वाले सूचकांक बाधाओं के साथ समस्याओं का पता लगा सकते हैं। नतीजतन, आपको या तो सुनिश्चित करने की आवश्यकता होगी कि आप सुनिश्चित करें कि आप किसी चीज को टाल रहे हैं, या एक सरल मार्ग पूरी तरह से ड्रॉपडॉटबेस से बच रहा है और बस प्रत्येक संग्रह से एक लूप में निकाल रहा है जैसे:

db.getCollectionNames().forEach(
  function(collection_name) {
    db[collection_name].remove()
  }
);

मेरे मामले में मैं कमांड-लाइन का उपयोग करके इसे चला रहा था:

mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"

1
इस सुझाव के लिए धन्यवाद, हम उपयोग कर रहे थे db[collection_name].drop()और यह उन्हीं मुद्दों को प्रदर्शित कर रहा था जो आपने db.dropDatabase()विधि के साथ वर्णित किए हैं । s/drop/remove/शानदार ढंग से काम कर रहा है!
स्कॉट्टीमैक

10
मैंने पाया कि remove()विंडोज के लिए MongoDB पर अच्छा काम नहीं करता है, और इसके बजाय मुझे remove({})ओएसएक्स और विंडोज दोनों पर काम करने की आवश्यकता है ।
दानह

टिप के लिए धन्यवाद, हम एक लिनक्स प्लेटफॉर्म पर हैं, लेकिन यह थोड़ा आगे देखने लायक है।
स्कॉट्टीमैक

2
मैंने डिलीट के लिए एक त्रुटि देखी - चूंकि db [collection_name] .remove () में क्वेरी नहीं है! तो यह वास्तव में होने की जरूरत है: db [collection_name] .remove ({})
JoelParke

16

@Robse और @DHH (kudos!) से जवाब संकलन करके, मुझे निम्नलिखित समाधान मिला है जो पूरी तरह से संतुष्ट करता है:

db.getCollectionNames().forEach( function(collection_name) { 
  if (collection_name.indexOf("system.") == -1) 
       db[collection_name].drop();
  else  
       db.collection_name.remove({}); 
});

आप से कनेक्ट डेटाबेस, कोड चलाते हैं।

यह उपयोगकर्ता के संग्रह को गिराकर और सिस्टम संग्रह को खाली करके डेटाबेस को साफ करता है।


यह स्क्रिप्ट केवल एक विशेष मानगो डेटाबेस के भीतर सब कुछ साफ करती है। यह इस डेटाबेस में सभी संग्रह मिटा देता है।
शस्त्रक

10

मानगो मूंग शैल का उपयोग करके कुछ पूर्ण मोंगोडब के लिए पूर्ण डिलीट ऑपरेशन का उपयोग करते हैं

संग्रह में विशेष दस्तावेज़ को हटाने के लिए: db.mycollection.remove( {name:"stack"} )

संग्रह में सभी दस्तावेजों को हटाने के लिए: db.mycollection.remove()

संग्रह हटाने के लिए: db.mycollection.drop()

डेटाबेस को हटाने के लिए: पहले use mydbकमांड और फिर उस डेटाबेस पर जाएं

db.dropDatabase()


7

अगर आपको एक ही बार में सबकुछ छोड़ने की जरूरत है: (सभी डेटाबेस को एक साथ छोड़ दें)

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


5

यदि आप केवल एक डेटाबेस और उसके उप-संग्रह को हटाना चाहते हैं, तो इसका उपयोग करें:

  • use <database name>;
  • db.dropDatabase();

यदि आप मोंगो में सभी डेटाबेस हटाना चाहते हैं तो इसका उपयोग करें:

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

शानदार जवाब ... यह शायद वही है जो उपयोगकर्ता को मिल रहा था
रॉबर्ट

1

एक डेटाबेस को हटाने का सबसे सरल तरीका ब्लॉग कहता है:

> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }

1

उल्का डेवलपर्स के लिए।

  1. अपने ऐप को चालू करते समय दूसरा टर्मिनल विंडो खोलें localhost:3000

  2. अपनी परियोजना के फ़ोल्डर समय में, meteor mongo

    coolName = new Mongo.Collection('yourCollectionName');

  3. फिर बस दर्ज करें db.yourCollectionName.drop();

  4. आप स्वचालित रूप से अपने स्थानीय सर्वर में परिवर्तन देखेंगे।

बाकी सबके लिए।

db.yourCollectionName.drop();


1
  1. सभी उपलब्ध dbs शो dbs को सूचीबद्ध करें
  2. आवश्यक db उपयोग चुनें
  3. डेटाबेस को ड्रॉप करें db.dropDatabase () // कुछ अतिरिक्त कमांड
  4. डीबी शो संग्रह में उपलब्ध सभी संग्रहों की सूची बनाएं
  5. एक विनिर्देश संग्रह निकालें db.collection.drop ()

उम्मीद है की वो मदद करदे


1

मैं पसंद करता हूं

db.your_collection.remove({})

ऊपर

db.your_collection.drop()

यदि आपका संग्रह एक विशेष संग्रह था यानी कैप्ड संग्रह या एक फ़ील्ड जिसे अद्वितीय के रूप में चिह्नित किया गया है, तो संग्रह स्वयं संग्रह को साफ़ कर देगा और जब संग्रह फिर से बनाया जाएगा तो यह एक सामान्य संग्रह होगा। आपको फिर से गुणों को परिभाषित करना होगा। इसलिए remove()संग्रह को हटाने और संग्रह के व्यवहार को प्रभावित किए बिना दस्तावेजों को साफ़ करने के लिए उपयोग करें।


1
अच्छे अंक। यह ध्यान देने योग्य है, हालांकि, drop()यह निकट-तात्कालिक है और remove({})मिनट या दसियों मिनट (संग्रह आकार के आधार पर) के लिए आपके डीबी को लॉक करता है।
सर्जियो तुलेंत्सेव

0

सभी DBs उपयोग को हटाने के लिए:

for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");

do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";

done 

0
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()

MongoDB db.dropDatabase () प्रलेखन 2.6 में पेश किए गए संशोधन की व्याख्या करता है:

संस्करण 2.6 में परिवर्तित: यह आदेश वर्तमान डेटाबेस से जुड़े उपयोगकर्ताओं को नहीं हटाता है।


0

MongoDB 3.2 और नए Mongo().getDBNames()में, mongoशेल सर्वर में डेटाबेस नामों की एक सूची का उत्पादन करेगा:

> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]

> show dbs
local  0.000GB
test   0.000GB
test2  0.000GB
test3  0.000GB

forEach()सरणी पर एक लूप तब dropDatabase()सभी सूचीबद्ध डेटाबेस को छोड़ने के लिए कॉल कर सकता है। वैकल्पिक रूप से आप कुछ महत्वपूर्ण डेटाबेस को छोड़ना चुन सकते हैं जिन्हें आप छोड़ना नहीं चाहते हैं। उदाहरण के लिए:

Mongo().getDBNames().forEach(function(x) {
  // Loop through all database names
  if (['admin', 'config', 'local'].indexOf(x) < 0) {
    // Drop if database is not admin, config, or local
    Mongo().getDB(x).dropDatabase();
  }
})

उदाहरण रन:

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
test2   0.000GB
test3   0.000GB

> Mongo().getDBNames().forEach(function(x) {
...   if (['admin', 'config', 'local'].indexOf(x) < 0) {
...     Mongo().getDB(x).dropDatabase();
...   }
... })

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.