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

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

16 ответов


в оболочке mongo:

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() маршрут в течение длительного времени, однако, если вы пытаетесь использовать это для очистки базы данных между тестовыми случаями, вы можете в конечном итоге найти проблемы с ограничениями индекса, не соблюдаемыми после падения базы данных. В результате вам придется либо возиться с ensureIndexes, либо более простой маршрут будет избегать dropdatabase alltogether и просто удалять из каждой коллекции в цикле, таком как:

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

в моем случае я запускал это из командная строка с помощью:

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

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

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

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

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


Hear некоторые используют полные операции удаления для mongodb с помощью Mongo shell

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

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

удалить коллекция : db.mycollection.drop()

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

db.dropDatabase()

использовать

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();

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

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

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

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

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

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

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

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

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

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

для всех еще.

db.yourCollectionName.drop();


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

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


предпочитаю

db.your_collection.remove({})

над

db.your_collection.drop()

Если ваша коллекция была специальная коллекция я.е


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

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

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

done 

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

A 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

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

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