Я делаю разработку на MongoDB. Для совершенно не злых целей я иногда хочу сдуть все в базе данных, т.е. Удалить каждую отдельную коллекцию и все остальное, что может быть вокруг, и начать с нуля. Есть ли одна строка кода, которая позволит мне это сделать? Бонусные баллы за предоставление как метода консоли MongoDB, так и метода драйвера Ruby от MongoDB.
Кроме того, из командной строки:
mongo DATABASE_NAME --eval "db.dropDatabase();"
У меня была та же проблема, когда мне понадобилось reset все коллекции, но я не хотел потерять пользователей баз данных. Используйте следующую строку кода, если вы хотите сохранить конфигурацию пользователя для базы данных:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
Этот код будет проходить через все имена коллекций из одной базы данных и удалять те, которые не начинаются с "system.".
remove
вместо drop
. Опция remove
видимому, поддерживает ограничения на поля очищаемых коллекций. Когда мы использовали метод drop
, unique
ограничение для одного из наших полей не было выполнено после удаления.
else
(в if (c.indexOf("system.") == -1)
), которая remove
вместо drop
. Таким образом, вы не останетесь с пустыми коллекциями, если вы их больше не используете
Я продолжил маршрут 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()});"
db[collection_name].drop()
и у него были те же проблемы, которые вы описали с помощью db.dropDatabase()
. Переключение s/drop/remove/
работало блестяще!
remove()
не очень хорошо работает на MongoDB для Windows, и вместо этого мне нужно было сделать remove({})
который работает как в OSX, так и в Windows.
Компилируя ответы от @Robse и @DanH (kudos!), у меня есть следующее решение, которое полностью меня удовлетворяет:
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()
Используйте
[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();
}
}
);
Для разработчиков Meteor.
Откройте второе окно терминала при запуске приложения в localhost:3000
.
В папке вашего проекта, meteor mongo
.
coolName = new Mongo.Collection('yourCollectionName');
Затем просто введите db.yourCollectionName.drop();
Вы автоматически увидите изменения на локальном сервере.
Для всех остальных.
db.yourCollectionName.drop();
Самый простой способ удалить базу данных: блог:
> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
Надеюсь, что поможет
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
Документация MongoDB db.dropDatabase(), объясняющая модификацию, введенную в 2.6:
Изменено в версии 2.6: Эта команда не удаляет пользователей, связанных с текущей базой данных.
Для удаления всех БД используйте:
for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");
do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";
done