Удалить все в базе данных MongoDB
Я занимаюсь разработкой на MongoDB. Для совершенно не злых целей я иногда хочу сдуть все в базе данных-то есть удалить каждую отдельную коллекцию и все, что может лежать вокруг, и начать с нуля. Есть ли хоть одна строка кода, которая позволит мне это сделать? Бонусные баллы за предоставление метода консоли MongoDB и метода драйвера MongoDB Ruby.
16 ответов
У меня была такая же проблема, когда мне нужно было сбросить все коллекции, но я не хотел терять пользователей базы данных. Используйте следующий код, если вы хотите сохранить конфигурацию пользователя для базы данных:
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.
откройте второе окно терминала при запуске приложения в
localhost:3000
.-
в папке вашего проекта запустите,
meteor mongo
.coolName = new Mongo.Collection('yourCollectionName');
тогда просто введите
db.yourCollectionName.drop();
вы автоматически увидите изменения на локальном сервере.
для всех еще.
db.yourCollectionName.drop();
- перечислите все доступные dbs показать ДБС
- выберите необходимый db использовать
- удалить базу данных децибел.dropDatabase() //Несколько дополнительных команд
- Список всех коллекций доступен в БД показ коллекции
- удалить коллекцию спецификация децибел.коллекция.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()})'