MongoDB скидає кожну базу даних


97

Мені хотілося б знати, чи є команда скидати всі бази даних з мого MongoDB?

Я знаю, якщо я хочу скинути лише одну таблицю даних, мені просто потрібно ввести ім'я бази даних, як код нижче, але я не хочу, щоб його вказували.

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

Відповіді:


142

ви можете створити цикл javascript, який виконує завдання, а потім виконати його в монгоконсолі.

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
Це скинуло мої системні бази даних (Mongo, версія 2.4.3). Мені довелося перезапустити процес mongodb, щоб він знову запрацював.
— Фелікс Шмідт,

7
Я думаю, коли хтось хоче скинути свої бази даних, він не хоче скидати внутрішні бази даних mongo, такі як адміністратор та локальні.
— carlin.scott

Також, база даних config, де зберігаються транзакції.
— Родріго Перейра Фрага

103

Спробуйте цю команду:

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

1
Чудово працює, і вам не потрібно створювати для нього файл js. Приємно.
— Ерік Хонн,

Який симетричний для його завантаження?
— нха

Однією з проблем цього підходу, яку я щойно виявив, є те, що db var зберігається через сеанси консолі mongo, тому, якщо хтось взаємодіє з однією з баз даних, це буде виключено викликом db.getSiblingDB.
— carlin.scott

3
Приємно. Це ідеально для Docker: Ddocker exec mongodb sh -c "mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'"
— perezmlal

Я пройшов через те саме питання і виявив, що це найкраще рішення для завдань автоматизації. Вам не хочеться писати нові файли та завантажувати їх у конвеєрі CI / CD, тому
— однокласним

21

Ви також можете зробити це за допомогою простої команди mongo:

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

Замість того, щоб писати умову if для кожної БД, ми можемо просто ввести масив і зробити indexOf.
— Sachin Gupta

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

З документів:

Mongo прочитає файл .mongorc.js із домашнього каталогу користувача, що викликає mongo. У файлі користувачі можуть визначати змінні, налаштовувати підказку оболонки mongo або оновлювати інформацію, яку вони хотіли б оновлювати кожного разу, коли вони запускають оболонку.


Я зробив оновлення, щоб виправити проблеми. Дякуємо, що завітали!
— 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, просто виправте падіння системних баз даних


4

Зробити це можна легко через офіційний драйвер c #:

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

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

так, це може бути ідеєю, але я хочу зробити це без C #. (Ой, вибачте, я використав тег C # для цього запитання)
— Джон

Ви можете створити цикл javascript, який виконує цю роботу, а потім виконати його в монгоконсолі.
— ALoR

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. Подяки всім наведеним вище відповідям. Просто виключіть базу даних "config".


-2

Це так просто, як

mongo --eval 'db.dropDatabase()'

Або ви можете розпочати сеанс монго на своєму терміналі та написати

db.dropDatabase()

Що абсолютно однаково.


Питання в тому, як скинути всі бази даних, а не окрему
— Роб Х,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.