Если у вас нет индексов для этой коллекции, вы можете просто удалить всю коллекцию, как показано в документах .
Однако если у вас есть индексы, удаление коллекции также приведет к удалению коллекции.удалить индексы, но обычно гораздо быстрее удалить все это, а затем воссоздать как коллекцию, так и индексы, чем удалять все документы с помощью команды remove (db.collection.remove({})
), так как для этого потребуется документ, освободив пространство.они берут и удаляют свою запись в индексах, если таковые имеются.
Единственное предостережение этого подхода заключается в том, что в изолированном кластере вы можете отбросить коллекцию и, даже если удаление считается успешным, коллекцияможет по-прежнему присутствовать в некоторых узлах, вызывая проблемы при его воссоздании.
Подробнее об этой проблеме OPEN
и ее обходе можно прочитать по адресу https://jira.mongodb.org/browse/SERVER-17397:
РЕЗЮМЕ ВЫПУСКА
При удалении базы данных / коллекции в изолированном кластере, даже если удаление считается успешным, яВозможно, что база данных / коллекция все еще может присутствовать в некоторых узлах кластера.В настоящее время мы не рекомендуем пользователям удалять базу данных или коллекцию, а затем пытаться повторно использовать пространство имен.
ВЛИЯНИЕ НА ПОЛЬЗОВАТЕЛЯ
Когда база данных / коллекция неуспешно удалено в данном узле, соответствующие файлы продолжают использовать дисковое пространство в этом узле.Попытка повторно использовать пространство имен может привести к неопределенному поведению.
WORKAROUNDS
Чтобы обойти эту проблему, можно выполнить следующие шаги, чтобы удалить базу данных / коллекцию в сегментированныйсреда:
- Удалите базу данных / коллекцию с помощью
mongos
. - Подключитесь к первичному узлу каждого сегмента и убедитесь, что пространство имен отброшено.Если это не так, пожалуйста, бросьте его.Удаление базы данных (например,
db.dropDatabase()
) удаляет файлы данных на диске для удаляемой базы данных. Подключитесь к mongos
, переключитесь на базу данных config
и удалите любую ссылку наудалено пространство имен из коллекций chunks
, locks
, databases
и collections
:
При удалении базы данных:
use config
db.collections.remove( { _id: /^DATABASE\./ } )
db.databases.remove( { _id: "DATABASE" } )
db.chunks.remove( { ns: /^DATABASE\./ } )
db.locks.remove( { _id: /^DATABASE\./ } )
При отбрасывании коллекции:
use config
db.collections.remove( { _id: "DATABASE.COLLECTION" } )
db.chunks.remove( { ns: "DATABASE.COLLECTION" } )
db.locks.remove( { _id: "DATABASE.COLLECTION" } )
Подключитесь к каждому mongos
и выполните команду flushRouterConfig
.