Как переименовать базу данных MongoDB?
в моем имени базы данных MongoDB есть опечатка, и я хочу переименовать базу данных.
Я могу скопировать и удалить так...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
есть ли команда для переименования базы данных?
6 ответов:
нет нет. см.https://jira.mongodb.org/browse/SERVER-701
к сожалению, это не простая функция для нас, чтобы реализовать из-за того, как метаданные базы данных хранятся в исходном (по умолчанию) механизм хранения. В файлах MMAPv1 пространство имен (например: dbName.коллекция), которая описывает каждую отдельную коллекцию и индекс включает имя базы данных, поэтому для переименования набора файлов базы данных каждая строка пространства имен должна быть переписанный. Это влияет:
- the .ns file
- каждый пронумерованный файл для коллекции
- пространство имен для каждого индекса
- внутренние уникальные имена каждой коллекции и индекса
- содержание системы.пространства и системы.индексы (или их эквиваленты в будущем)
- другие места, которые я могу пропустить
Это просто для выполнения переименования одной базы данных в a автономной экземпляр mongod. Для наборов реплик вышеуказанное должно быть сделано на каждом узле реплики, плюс на каждом узле каждая запись oplog, которая ссылается на эту базу данных, должна быть каким-то образом недействительна или переписана, а затем, если это сегментированный кластер, также необходимо добавить эти изменения в каждый сегмент, если БД разделена, плюс серверы конфигурации имеют все метаданные сегментов с точки зрения пространств имен с их полными именами.
не было бы абсолютно никакой возможности чтобы сделать это на живой системе.
чтобы сделать это в автономном режиме, потребуется перезаписать каждый файл базы данных для размещения нового имени, и в этот момент он будет таким же медленным, как и текущая команда "copydb"...
вы могли бы сделать это:
db.copyDatabase("db_to_rename","db_renamed","localhost") use db_to_rename db.dropDatabase();редакционное Примечание: это тот же подход, который используется в самом вопросе, но оказался полезным для других независимо.
альтернативное решение: вы можете сбросить свою БД и восстановить ее под другим именем. Как я уже испытал это гораздо быстрее, чем
db.copyDatabase().$ mongodump -d old_db_name -o mongodump/ $ mongorestore -d new_db_name mongodump/old_db_namehttp://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
ALERT: Эй люди просто будьте осторожны при копировании базы данных, если вы не хотите испортить различные коллекции под одной базой данных.
ниже показано, как переименовать
> show dbs; testing games moviesдля переименования используется следующий синтаксис
db.copyDatabase("old db name","new db name")пример:
db.copyDatabase('testing','newTesting')теперь вы можете безопасно удалить старую БД следующим образом
use testing; db.dropDatabase(); //Here the db **testing** is deleted successfullyтеперь просто подумайте, что произойдет, если вы попробуете переименование нового имени базы данных с существующим именем базы данных
пример:
db.copyDatabase('testing','movies');в этом контексте все коллекции (таблицы)тестирование будет скопировано в фильмы
вышеуказанный процесс медленный, вы можете использовать ниже метод, но вам нужно переместить коллекцию по коллекции в другую БД.
use admin db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})
в случае, если вы поместите все свои данные в базу данных администратора (вы не должны), вы заметите
db.copyDatabase()не будет работать, потому что ваш пользователь требует много привилегий вы, вероятно, не хотите, чтобы дать ему. Вот скрипт для копирования базы данных вручную:use old_db db.getCollectionNames().forEach(function(collName) { db[collName].find().forEach(function(d){ db.getSiblingDB('new_db')[collName].insert(d); }) });
Comments