MongoDB menjatuhkan setiap database


97

Saya ingin tahu apakah ada perintah untuk menghapus setiap database dari MongoDB saya?

Saya tahu jika saya ingin menghapus hanya satu dataTable, saya hanya perlu mengetikkan nama database seperti kode di bawah ini tetapi saya tidak ingin menentukannya.

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

Jawaban:


143

Anda dapat membuat loop javascript yang melakukan pekerjaan itu dan kemudian menjalankannya di mongoconsole.

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

simpan ke dropall.js lalu jalankan:

mongo dropall.js

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

3
Anda juga bisa menyalin dan menempelkan kode di atas dan mengetiknya di konsol mongo.
Vivek Pandey

2
Ini menjatuhkan database sistem saya (Mongo Version 2.4.3). Saya harus memulai ulang proses mongodb untuk membuatnya berfungsi kembali.
Felix Schmidt

7
Saya pikir ketika seseorang ingin menjatuhkan database mereka, mereka tidak ingin menjatuhkan database internal mongo seperti admin dan lokal.
carlin.scott

Juga, database config, tempat transaksi disimpan.
Rodrigo Pereira Fraga

103

Coba perintah ini:

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

1
Berfungsi dengan baik, dan Anda tidak perlu membuat file js untuk itu. Bagus.
Erik Honn

Apa simetris untuk memuatnya?
nha

Satu masalah dengan pendekatan ini yang baru saya temukan adalah bahwa db var bertahan melalui sesi konsol mongo jadi jika seseorang berinteraksi dengan salah satu database maka itu akan dikecualikan oleh panggilan db.getSiblingDB.
carlin.scott

3
Bagus. Ini sempurna untuk Docker: Ddocker exec mongodb sh -c "mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'"
perezmlal

Saya mengalami masalah yang sama dan saya menemukan ini adalah solusi terbaik untuk tugas otomatisasi. Anda tidak ingin menulis file baru dan mendownload dalam pipeline CI / CD sehingga skrip satu baris sangat mudah dikelola
Carmine Ingaldi

21

Anda juga dapat melakukan ini dengan perintah mongo sederhana:

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();
 })

Alih-alih menulis kondisi if untuk setiap DB, kita dapat dengan mudah memasukkan array dan melakukan indexOf.
Sachin Gupta

5

Menambahkan jawaban @ ALoR, untuk kenyamanan Anda dapat meletakkan berikut ini di ~ / .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();
    }
}

Kemudian di cangkang mongo bisa langsung Anda lakukan

dropDatabases()

Dari dokumen:

Mongo akan membaca file .mongorc.js dari direktori home pengguna yang memanggil mongo. Dalam file tersebut, pengguna dapat menentukan variabel, menyesuaikan prompt mongo shell, atau memperbarui informasi yang ingin mereka perbarui setiap kali mereka meluncurkan shell.


Saya telah melakukan pembaruan untuk memperbaiki masalah. Terima kasih telah bergabung!
btiernay

5

Simpan ini ke 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();
}

Sekarang Anda dapat menjalankan:

mongo drop_all_dbs.js

dan semua database (kecuali admin dan lokal) akan dihapus.

Jawaban ini adalah salinan dari ALoR, cukup perbaiki penurunan dbs sistem


4

Anda dapat melakukannya dengan mudah melalui c # driver resmi:

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

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

ya itu bisa jadi ide, tapi saya ingin melakukannya tanpa C #. (Oh maaf, saya menggunakan tag C # untuk pertanyaan ini)
John

Anda dapat membuat loop javascript yang melakukan pekerjaan itu dan kemudian menjalankannya di mongoconsole.
ALoR

2
@AndrewOrsich dan @JohnSmith saya telah memposting skripnya.
ALoR

2

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

Yang ini aman untuk disalin dan dijalankan di mongoshell. Penghargaan untuk semua jawaban di atas. Cukup kecualikan database 'config' juga.


-2

Semudah itu

mongo --eval 'db.dropDatabase()'

Atau, Anda dapat memulai sesi mongo di terminal Anda dan menulis

db.dropDatabase()

Yang persis sama.


Pertanyaannya adalah bagaimana menghapus semua database, bukan satu individu
Rob H
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.