Удалить все в базе данных MongoDB - PullRequest
420 голосов
/ 29 июля 2010

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

Ответы [ 17 ]

558 голосов
/ 29 июля 2010

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

use [database];
db.dropDatabase();

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

109 голосов
/ 24 июля 2012

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

mongo DATABASE_NAME --eval "db.dropDatabase();"
59 голосов
/ 03 сентября 2014

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

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

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

34 голосов
/ 08 января 2015

Я долго следовал по маршруту 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()});"
14 голосов
/ 21 января 2015

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

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

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

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

9 голосов
/ 10 декабря 2013

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

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

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

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

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

db.dropDatabase()
8 голосов
/ 11 декабря 2012

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

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();
4 голосов
/ 16 октября 2014

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

  • 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();
                }
             }
          );
3 голосов
/ 26 сентября 2018

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

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
1 голос
/ 25 декабря 2015

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

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

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

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

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

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

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

db.yourCollectionName.drop();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...