Я занимаюсь разработкой на MongoDB. В совершенно не злых целях я иногда хочу уничтожить все в базе данных, то есть удалить каждую отдельную коллекцию и все остальное, что может лежать вокруг, и начать все с нуля. Есть ли одна строка кода, которая позволит мне сделать это? Бонусные баллы за предоставление как метода консоли MongoDB, так и метода драйвера MongoDB Ruby.
454
db.dropAllUsers();
Также из командной строки:
источник
У меня была такая же проблема, когда мне нужно было сбросить все коллекции, но я не хотел терять пользователей базы данных. Используйте следующую строку кода, если вы хотите сохранить конфигурацию пользователя для базы данных:
Этот код будет проходить через все имена коллекций из одной базы данных и удалять те, которые не начинаются с «system».
источник
remove
вместоdrop
.remove
Похоже, эта опция поддерживает ограничения на поля очищаемых коллекций. Когда мы использовалиdrop
метод,unique
ограничение на одно из наших полей не соблюдалось после удаления.else
ветку (кif (c.indexOf("system.") == -1)
), которая делаетremove
вместоdrop
. Таким образом, у вас не останется пустых коллекций, если вы их больше не используетеdb[c]
использование,db.getCollection(c)
которое позволяет избежать ошибок, когда имена коллекций являются цифрами .db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
Я
db.dropDatabase()
долго следовал по маршруту, однако, если вы пытаетесь использовать это для очистки базы данных между тестами, вы можете в конечном итоге обнаружить проблемы с ограничениями индекса, которые не соблюдаются после удаления базы данных. В результате вам нужно будет либо возиться с sureIndexes, либо более простой маршрут позволит полностью избежать dropDatabase и просто удалить из каждой коллекции в цикле, например:В моем случае я запускал это из командной строки, используя:
источник
db[collection_name].drop()
и оно показывало те же проблемы, которые вы описали с помощьюdb.dropDatabase()
метода. Переключениеs/drop/remove/
сработало блестяще!remove()
это не очень хорошо работает на MongoDB для Windows, и вместо этого мне нужно было сделать то,remove({})
что работает как на OSX, так и на Windows.Компилируя ответы от @Robse и @DanH (слава!), Я получил следующее решение, которое меня полностью удовлетворяет:
Подключитесь к вашей базе данных, запустите код.
Он очищает базу данных путем удаления пользовательских коллекций и очистки системных коллекций.
источник
Слышать, некоторые используют полные операции удаления для mongodb, используя оболочку mongo
Чтобы удалить конкретный документ в коллекциях:
db.mycollection.remove( {name:"stack"} )
Чтобы удалить все документы в коллекциях:
db.mycollection.remove()
Чтобы удалить коллекцию:
db.mycollection.drop()
чтобы удалить базу данных: сначала перейдите в эту базу данных по
use mydb
команде, а затемисточник
использование
источник
в случае, если вам нужно отбросить все сразу: (отбросить все базы данных одновременно)
источник
источник
если вы хотите удалить только базу данных и ее подколлекции, используйте это:
use <database name>;
db.dropDatabase();
если вы хотите удалить все базы данных в монго, используйте это:
источник
Самый простой способ удалить базу данных, скажем, в блоге:
источник
Для разработчиков Meteor.
Откройте второе окно терминала при запуске приложения в
localhost:3000
.В папке вашего проекта запустите
meteor mongo
.coolName = new Mongo.Collection('yourCollectionName');
Тогда просто введите
db.yourCollectionName.drop();
Вы автоматически увидите изменения на своем локальном сервере.
Для всех остальных.
db.yourCollectionName.drop();
источник
надеюсь, это поможет
источник
я предпочитаю
над
Если ваша коллекция была специальной коллекцией, то есть закрытой коллекцией или коллекцией с одним полем, помеченным как уникальное, удаление удалит саму коллекцию, а когда коллекция будет создана снова, это будет обычная коллекция. Вы должны будете снова определить свойства. Поэтому используйте
remove()
для очистки документов, не удаляя коллекцию и не влияя на поведение коллекции.источник
drop()
это почти мгновенно иremove({})
блокирует вашу базу данных на минуты или десятки минут (в зависимости от размера коллекции).Для удаления всех БД используйте:
источник
MongoDB db.dropDatabase () документация, объясняющая модификацию, представленную в 2.6:
источник
В MongoDB 3.2 и новее,
Mongo().getDBNames()
вmongo
оболочке будет выводиться список имен баз данных на сервере:Затем
forEach()
можно вызвать цикл по массиву,dropDatabase()
чтобы удалить все перечисленные базы данных. При желании вы можете пропустить некоторые важные базы данных, которые вы не хотите удалять. Например:Пример выполнения:
источник