Ответ 1
В оболочке mongo:
use [database];
db.dropDatabase();
Я делаю разработку на MongoDB. Для совершенно не злых целей я иногда хочу сдуть все в базе данных, т.е. Удалить каждую отдельную коллекцию и все остальное, что может быть вокруг, и начать с нуля. Есть ли одна строка кода, которая позволит мне это сделать? Бонусные баллы за предоставление как метода консоли MongoDB, так и метода драйвера Ruby от MongoDB.
В оболочке mongo:
use [database];
db.dropDatabase();
Кроме того, из командной строки:
mongo DATABASE_NAME --eval "db.dropDatabase();"
У меня была та же проблема, когда мне понадобилось reset все коллекции, но я не хотел потерять пользователей баз данных. Используйте следующую строку кода, если вы хотите сохранить конфигурацию пользователя для базы данных:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
Этот код будет проходить через все имена коллекций из одной базы данных и удалять те, которые не начинаются с "system.".
Я продолжил маршрут 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()});"
Компилируя ответы от @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();
}
}
);
в случае, если вам нужно отбросить все сразу: (отбросить все базы данных одновременно)
mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).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();
Надеюсь, что поможет
я предпочитаю
db.your_collection.remove({})
над
db.your_collection.drop()
Если ваша коллекция была специальной коллекцией, то есть закрытой коллекцией или коллекцией с одним полем, помеченным как уникальное, удаление удалит саму коллекцию, а когда коллекция будет создана снова, это будет обычная коллекция. Вы должны будете снова определить свойства. Поэтому используйте remove()
чтобы очистить документы, не удаляя коллекцию и не влияя на ее поведение.
Для удаления всех БД используйте:
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
выведет список имен баз данных на сервере:
> 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
db.getCollectionNames().forEach(c=>db[c].drop())