Удалить все в базе данных MongoDB

347

Я делаю разработку на MongoDB. Для совершенно не злых целей я иногда хочу сдуть все в базе данных, т.е. Удалить каждую отдельную коллекцию и все остальное, что может быть вокруг, и начать с нуля. Есть ли одна строка кода, которая позволит мне это сделать? Бонусные баллы за предоставление как метода консоли MongoDB, так и метода драйвера Ruby от MongoDB.

Теги:

13 ответов

446
Лучший ответ

В оболочке mongo:

use [database];
db.dropDatabase();

Ruby-код довольно похож.

  • 47
    Примечание: это не удалит базу данных, только все ее содержимое.
  • 19
    @connorbode Спасибо за это. Я прочитал это и сразу же: "B-Но OP не хочет удалять базу данных!" , Очень вводящая в заблуждение команда !!
Показать ещё 4 комментария
99

Кроме того, из командной строки:

mongo DATABASE_NAME --eval "db.dropDatabase();"
  • 2
    Я не верю, что это работает в 2.4.6. Мои записи все еще существуют.
47

У меня была та же проблема, когда мне понадобилось reset все коллекции, но я не хотел потерять пользователей баз данных. Используйте следующую строку кода, если вы хотите сохранить конфигурацию пользователя для базы данных:

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

Этот код будет проходить через все имена коллекций из одной базы данных и удалять те, которые не начинаются с "system.".

  • 2
    Как упомянуто @DanH, вы можете найти более надежным использовать remove вместо drop . Опция remove видимому, поддерживает ограничения на поля очищаемых коллекций. Когда мы использовали метод drop , unique ограничение для одного из наших полей не было выполнено после удаления.
  • 0
    @Scottymac - еще лучше, добавьте ветку elseif (c.indexOf("system.") == -1) ), которая remove вместо drop . Таким образом, вы не останетесь с пустыми коллекциями, если вы их больше не используете
Показать ещё 4 комментария
25

Я продолжил маршрут db.dropDatabase() в течение длительного времени, однако, если вы пытаетесь использовать это для очистки базы данных между тестовыми примерами, вы, возможно, в конечном итоге найдете проблемы с ограничениями индекса, которые не будут соблюдаться после падения базы данных. В результате вам придется либо обходиться с makeIndexes, либо более простой маршрут будет избегать dropDatabase alltogether и просто удалить из каждой коллекции в цикле, например:

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 для Windows, и вместо этого мне нужно было сделать remove({}) который работает как в OSX, так и в Windows.
Показать ещё 2 комментария
13

Компилируя ответы от @Robse и @DanH (kudos!), у меня есть следующее решение, которое полностью меня удовлетворяет:

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

Подключитесь к базе данных, запустите код.

Он очищает базу данных, отбрасывая коллекции пользователей и опуская коллекцию системы.

  • 1
    Это работает довольно хорошо. Именно то, что мне было нужно.
  • 0
    Этот скрипт очищает все в пределах только одной конкретной базы данных Mongo. Стирает все коллекции в этой базе данных.
8

Слушайте, некоторые используют операции полного удаления для mongodb, используя оболочку mongo

Чтобы удалить конкретный документ в коллекциях: db.mycollection.remove( {name:"stack"} )

Чтобы удалить все документы в коллекциях: db.mycollection.remove()

Чтобы удалить коллекцию: db.mycollection.drop()

для удаления базы данных: сначала перейдите в эту базу данных командой use mydb, а затем

db.dropDatabase()
8

Используйте

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();
3

если вы хотите удалить только базу данных и ее подкатегории, используйте это:

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

если вы хотите удалить все базы данных в mongo, используйте это:

db.adminCommand("listDatabases").databases.forEach(function(d)
             {
              if(d.name!="admin" && d.name!="local" && d.name!="config")
                {
                 db.getSiblingDB(d.name).dropDatabase();
                }
             }
          );
  • 0
    Отличный ответ ... это, вероятно, то, что получил пользователь
1

Для разработчиков Meteor.

  • Откройте второе окно терминала при запуске приложения в localhost:3000.

  • В папке вашего проекта, meteor mongo.

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

  • Затем просто введите db.yourCollectionName.drop();

  • Вы автоматически увидите изменения на локальном сервере.

Для всех остальных.

db.yourCollectionName.drop();

1

Самый простой способ удалить базу данных: блог:

> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
0
  • Список всех доступных dbs показать dbs
  • Выберите нужный db  использовать
  • Отбросить базу данных  db.dropDatabase() // Несколько дополнительных команд
  • Список всех коллекций, доступных в db показать коллекции
  • Удалить коллекцию спецификаций db.collection.drop()

Надеюсь, что поможет

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

Документация MongoDB db.dropDatabase(), объясняющая модификацию, введенную в 2.6:

Изменено в версии 2.6: Эта команда не удаляет пользователей, связанных с текущей базой данных.

0

Для удаления всех БД используйте:

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

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

done 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню