Há um erro de digitação no nome do meu banco de dados MongoDB e estou procurando renomear o banco de dados.
Eu posso copiar e excluir assim ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Existe um comando para renomear um banco de dados?
copyDatabase
é obsoleto #Respostas:
Não, não existe. Consulte https://jira.mongodb.org/browse/SERVER-701
fonte
Você pode fazer isso:
Nota Editorial: esta é a mesma abordagem usada na pergunta em si, mas provou ser útil para outras pessoas, independentemente.
fonte
copyDatabase
métodocopyDatabase
método *, o que é desnecessário, e, portanto, uma solução pior do que aquele que o OP já estava ciente * cc @GurbakhshishSingh.Solução alternativa: você pode despejar seu banco de dados e restaurá-lo em nome diferente. Como experimentei, é muito mais rápido que
db.copyDatabase()
.http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
fonte
mongodump
criado. Não sabia que você pode restaurá-lo com um nome diferente. Obrigado!--gzip
e criar um arquivodb.copyDatabase()
agora está obsoleto--db
(-d
) também é obsoleto. Parece que houve um grupo de depreciação acontecendo, dado quecopyDatabase
também se foi. Eu cutuquei o SERVER-701 com minhas anotações .ALERTA : Ei pessoal, tenha cuidado ao copiar o banco de dados, se você não quiser estragar as diferentes coleções no banco de dados único.
A seguir, mostramos como renomear
Para renomear, use a seguinte sintaxe
Exemplo:
Agora você pode excluir com segurança o banco de dados antigo da seguinte maneira
Agora pense no que acontece se você tentar renomear o novo nome do banco de dados com o nome existente.
Exemplo:
Portanto, neste contexto, todas as coleções (tabelas) de teste serão copiadas para o banco de dados de filmes .
fonte
copyDatabase
se foi. Eu cutuquei o SERVER-701 com minhas anotações .Embora o Mongodb não forneça o comando rename Database, ele fornece o comando r ename Collection , que não apenas modifica o nome da coleção, mas também o nome do banco de dados.
Este comando modifica apenas os metadados, o custo é muito pequeno, precisamos apenas percorrer todas as coleções abaixo
db1
, renomeadasdb2
para conseguir renomear o nome do banco de dados.você pode fazer isso neste script Js
fonte
foo
nobar
banco de dados possui um espaço para nomebar.foo
. O índice em,_id
portanto, possui o espaço para nomebar.foo._id_
. Renomear a coleção (deve) realizar uma pesquisa de prefixo e substituir em todos os namespaces de que tenha conhecimento, semelhante ao--nsFrom
e--nsTo
opções paramongorestore
.O processo acima é lento, você pode usar o método abaixo, mas precisa mover a coleção por coleção para outro banco de dados.
fonte
Não há mecanismo para renomear bancos de dados. A resposta atualmente aceita no momento da redação é factualmente correta e oferece alguns detalhes interessantes sobre a desculpa a montante, mas não oferece sugestões para replicar o comportamento. Outras respostas apontam para
copyDatabase
, que não é mais uma opção, pois a funcionalidade foi removida no 4.0 . Atualizei o SERVER-701 com minhas anotações e incredulidade. 🙃Comportamento equivalente envolve
mongodump
emongorestore
em um pouco de dança:Exporte seus dados, anotando os "namespaces" em uso. Por exemplo, em um dos meus conjuntos de dados, tenho uma coleção com o namespace
byzmcbehoomrfjcs9vlj.Analytics
- esse prefixo ( na verdade o nome do banco de dados ) será necessário na próxima etapa.Importe seus dados, fornecimento
--nsFrom
e--nsTo
argumentos. ( Documentação. ) Continuando com o meu exemplo hipotético (e extremamente ilegível) acima, para restaurar um nome mais sensato, invoco:Alguns também podem apontar o
--db
argumento para o armazenamento múltiplo, mas isso também foi preterido e dispara um aviso contra o uso em backups de pastas não BSON com uma sugestão completamente incorreta de "use --nsInclude instead
". A conversão de espaço para nome acima é equivalente ao uso da--db
opção e é a configuração correta de manipulação do espaço para nome, pois não estamos tentando filtrar o que está sendo restaurado.fonte
--nsFrom
e--nsTo
trabalhou para mim. Obrigado!Eu tentei fazer.
e soube que foi preterido pela comunidade mongo, embora tenha criado o backup ou renomeado DB.
Portanto, não convencido com a abordagem acima, tive que usar o Dump of local usando o comando abaixo
conectado ao Db.
então
depois restaurou o banco de dados com o comando
fonte
No caso de você colocar todos os seus dados no banco de dados do administrador (não deveria), você notará
db.copyDatabase()
que não funcionará porque seu usuário exige muitos privilégios que você provavelmente não deseja conceder. Aqui está um script para copiar o banco de dados manualmente:fonte