Я делаю разработку на MongoDB. Для совершенно не злых целей я иногда хочу сдуть все в базе данных, т.е. Удалить каждую отдельную коллекцию и все остальное, что может быть вокруг, и начать с нуля. Есть ли одна строка кода, которая позволит мне это сделать? Бонусные баллы за предоставление как метода консоли MongoDB, так и метода драйвера Ruby от MongoDB.
Удалить все в базе данных MongoDB
Ответ 1
В оболочке mongo:
use [database];
db.dropDatabase();
Ответ 2
Кроме того, из командной строки:
mongo DATABASE_NAME --eval "db.dropDatabase();"
Ответ 3
У меня была та же проблема, когда мне понадобилось reset все коллекции, но я не хотел потерять пользователей баз данных. Используйте следующую строку кода, если вы хотите сохранить конфигурацию пользователя для базы данных:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
Этот код будет проходить через все имена коллекций из одной базы данных и удалять те, которые не начинаются с "system.".
Ответ 4
Я продолжил маршрут 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()});"
Ответ 5
Компилируя ответы от @Robse и @DanH (kudos!), у меня есть следующее решение, которое полностью меня удовлетворяет:
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
Подключитесь к базе данных, запустите код.
Он очищает базу данных, отбрасывая коллекции пользователей и опуская коллекцию системы.
Ответ 6
Слушайте, некоторые используют операции полного удаления для mongodb, используя оболочку mongo
Чтобы удалить конкретный документ в коллекциях: db.mycollection.remove( {name:"stack"} )
Чтобы удалить все документы в коллекциях: db.mycollection.remove()
Чтобы удалить коллекцию: db.mycollection.drop()
для удаления базы данных:
сначала перейдите в эту базу данных командой use mydb
, а затем
db.dropDatabase()
Ответ 7
Используйте
[databaseName]
db.Drop+databaseName();
drop collection
use databaseName
db.collectionName.drop();
Ответ 8
если вы хотите удалить только базу данных и ее подкатегории, используйте это:
-
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();
}
}
);
Ответ 9
в случае, если вам нужно отбросить все сразу: (отбросить все базы данных одновременно)
mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
Ответ 10
Самый простой способ удалить базу данных: блог:
> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
Ответ 11
Для разработчиков Meteor.
-
Откройте второе окно терминала при запуске приложения в
localhost:3000
. -
В папке вашего проекта,
meteor mongo
.coolName = new Mongo.Collection('yourCollectionName');
-
Затем просто введите
db.yourCollectionName.drop();
-
Вы автоматически увидите изменения на локальном сервере.
Для всех остальных.
db.yourCollectionName.drop();
Ответ 12
- Список всех доступных dbs показать dbs
- Выберите нужный db использовать
- Отбросить базу данных db.dropDatabase() // Несколько дополнительных команд
- Список всех коллекций, доступных в db показать коллекции
- Удалить коллекцию спецификаций db.collection.drop()
Надеюсь, что поможет
Ответ 13
я предпочитаю
db.your_collection.remove({})
над
db.your_collection.drop()
Если ваша коллекция была специальной коллекцией, то есть закрытой коллекцией или коллекцией с одним полем, помеченным как уникальное, удаление удалит саму коллекцию, а когда коллекция будет создана снова, это будет обычная коллекция. Вы должны будете снова определить свойства. Поэтому используйте remove()
чтобы очистить документы, не удаляя коллекцию и не влияя на ее поведение.
Ответ 14
Для удаления всех БД используйте:
for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");
do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";
done
Ответ 15
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
Документация MongoDB db.dropDatabase(), объясняющая модификацию, введенную в 2.6:
Изменено в версии 2.6: Эта команда не удаляет пользователей, связанных с текущей базой данных.
Ответ 16
В MongoDB 3.2 и новее Mongo().getDBNames()
в оболочке mongo
выведет список имен баз данных на сервере:
> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]
> show dbs
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
Затем цикл 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
Ответ 17
db.getCollectionNames().forEach(c=>db[c].drop())