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

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

18 ответов

Решение

В оболочке монго:

use [database];
db.dropDatabase();

Код на Ruby очень похож.

Также из командной строки:

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

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

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

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

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

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

В моем случае я запускал это из командной строки, используя:

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

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

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

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

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

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

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

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

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

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

db.dropDatabase()

В случае, если вам нужно отбросить все сразу: (отбросить все базы данных одновременно)

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

Использование

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();

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

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

Я предпочитаю

db.your_collection.remove({})

над

db.your_collection.drop()

Если ваша коллекция была специальной коллекцией, то есть закрытой коллекцией или коллекцией с одним полем, помеченным как уникальное, удаление удалит саму коллекцию, а когда коллекция будет создана снова, это будет обычная коллекция. Вы должны будете снова определить свойства. Так что используйте remove() очистить документы, не удаляя коллекцию и не влияя на поведение коллекции.

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

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

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

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

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

done 
  1. Перечислите все доступные dbs show dbs
  2. Выберите необходимое использование БД
  3. Удалить базу данных db.dropDatabase() // Несколько дополнительных команд
  4. Перечислите все коллекции, доступные в шоу-коллекциях БД
  5. Удалить коллекцию спецификаций db.collection.drop()

надеюсь, это поможет

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

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

  2. В папке вашего проекта запустите, meteor mongo,

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

  3. Тогда просто введите db.yourCollectionName.drop();

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

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

db.yourCollectionName.drop();

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

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

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

В MongoDB 3.2 и новее, Mongo().getDBNames() в mongo shell выведет список имен баз данных на сервере:

> 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

просто выполните этот шаг, чтобы удалить коллекцию:

  1. откройте свой терминал и запустите: mongo
  2. переключитесь на свою базу данных по имени, например: используйте myDataBase
  3. чтобы показать все запущенные таблицы: показать коллекции
  4. db.myTable.drop() готово :)
Другие вопросы по тегам