В моем имени базы данных MongoDB есть опечатка, и я хочу переименовать базу данных.
Я могу копировать и удалять так ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Есть ли команда переименовать базу данных?
В моем имени базы данных MongoDB есть опечатка, и я хочу переименовать базу данных.
Я могу копировать и удалять так ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Есть ли команда переименовать базу данных?
copyDatabase
также не рекомендуетсяОтветы:
Нет, нет Смотрите https://jira.mongodb.org/browse/SERVER-701
источник
Вы могли бы сделать это:
От редакции. Это тот же подход, который использовался в самом вопросе, но, тем не менее, оказался полезным для других.
источник
copyDatabase
методеcopyDatabase
методе *, который не нужен, и, следовательно, является худшим решением, о котором уже знал ОП. * cc @GurbakhshishSinghАльтернативное решение: вы можете сбросить свою базу данных и восстановить ее под другим именем. Как я понял, это гораздо быстрее, чем
db.copyDatabase()
.http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
источник
mongodump
создал. Не знал, что вы можете восстановить его с другим именем. Спасибо!--gzip
и создать архивdb.copyDatabase()
как теперь устарел--db
(-d
) сам по себе также не рекомендуется. Похоже, что-то вроде вечеринки по поводу обесцениванияcopyDatabase
продолжается. Я ткнул SERVER-701 своими заметками .ALERT : Привет, ребята, будьте осторожны при копировании базы данных, если вы не хотите путать разные коллекции в одной базе данных.
Ниже показано, как переименовать
Для переименования вы используете следующий синтаксис
Пример:
Теперь вы можете безопасно удалить старую базу данных следующим образом
Теперь просто подумайте, что произойдет, если вы попытаетесь переименовать новое имя базы данных в существующее имя базы данных.
Пример:
Таким образом, в этом контексте все коллекции (таблицы) тестирования будут скопированы в базу данных фильмов .
источник
copyDatabase
ушел Я ткнул SERVER-701 своими заметками .Хотя Mongodb не предоставляет команду переименования базы данных, она предоставляет команду r ename Collection , которая не только изменяет имя коллекции, но и имя базы данных.
Эта команда только изменяет метаданные, стоимость очень мала, нам нужно только просмотреть все коллекции
db1
, переименованныеdb2
для достижения переименования базы данных.Вы можете сделать это в этом сценарии Js
источник
foo
вbar
базе данных, имеет пространство именbar.foo
. Индекс на_id
таким образом имеет пространство именbar.foo._id_
. Переименование коллекции (должно) выполнить поиск префиксов и заменить на все пространства имен он осведомлен о том , похожи на--nsFrom
и--nsTo
вариантуmongorestore
.Процесс выше медленный, вы можете использовать метод ниже, но вам нужно переместить коллекцию за коллекцией в другую базу данных.
источник
Не существует механизма для переименования баз данных. Принято в настоящее время ответ на момент написания не является фактически правильным и предлагают некоторые интересные детали фона как на оправдание вверх по течению, но предложения нет предложений для репликации поведения. Другие ответы указывают на то
copyDatabase
, что больше не вариант, так как функциональность была удалена в 4.0 . Я обновил SERVER-701 своими заметками и недоверчивостью. 🙃Эквивалентное поведение включает в себя
mongodump
иmongorestore
немного танца:Экспортируйте свои данные, отмечая используемые «пространства имен». Например, в одном из моих наборов данных у меня есть коллекция с пространством имен
byzmcbehoomrfjcs9vlj.Analytics
- этот префикс ( фактически имя базы данных ) понадобится на следующем шаге.Импортируйте ваши данные, предоставив
--nsFrom
и--nsTo
аргументы. ( Документация. ) Продолжая мой приведенный выше гипотетический (и крайне нечитаемый) пример, чтобы восстановить более чувственное имя, я призываю:Некоторые могут также указать на
--db
аргумент mongorestore, однако это также устарело и выдает предупреждение против использования резервных копий папок не-BSON с совершенно ошибочным предложением "use --nsInclude instead
». Приведенный выше перевод пространства имен эквивалентен использованию этой--db
опции и является правильной настройкой для манипулирования пространством имен, поскольку мы не пытаемся фильтровать то, что восстанавливается.источник
--nsFrom
и--nsTo
работал на меня. Спасибо!Я пытался делать.
и узнал, что сообщество mongo устарело, хотя создало резервную копию или переименовало БД.
Так что, не убедившись в вышеизложенном подходе, мне пришлось взять дамп локального с помощью команды ниже
подключен к Db.
тогда
затем восстановил БД с помощью команды.
источник
В случае, если вы поместите все свои данные в базу данных администратора (вы не должны), вы заметите, что
db.copyDatabase()
это не сработает, потому что вашему пользователю требуется много привилегий, которые вы, вероятно, не хотите им предоставлять. Вот скрипт для копирования базы данных вручную:источник