Il y a une faute de frappe dans le nom de ma base de données MongoDB et je cherche à renommer la base de données.
Je peux copier et supprimer comme ça ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Existe-t-il une commande pour renommer une base de données?
copyDatabase
est également obsolèteRéponses:
Non, il n'y en a pas. Voir https://jira.mongodb.org/browse/SERVER-701
la source
Vous pouvez faire ceci:
Note éditoriale: il s'agit de la même approche que celle utilisée dans la question elle-même, mais elle s'est révélée utile à d'autres malgré tout.
la source
copyDatabase
méthodecopyDatabase
méthode *, qui est inutile, et donc une pire solution que celle que le PO connaissait déjà. * cc @GurbakhshishSinghSolution alternative: vous pouvez vider votre base de données et la restaurer sous un nom différent. Comme je l'ai vécu, c'est beaucoup plus rapide que
db.copyDatabase()
.http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
la source
mongodump
créé. Je ne savais pas que vous pouvez le restaurer avec un nom différent. Merci!--gzip
et créez une archivedb.copyDatabase()
est désormais obsolète--db
(-d
) est lui-même également obsolète. Il y a eu un peu de parti de dépréciation en cours, semble-t-il, étant donné qu'il acopyDatabase
également disparu. J'ai poussé SERVER-701 avec mes notes .ALERTE : Hé les gens, faites juste attention lors de la copie de la base de données, si vous ne voulez pas gâcher les différentes collections sous une seule base de données.
Ce qui suit vous montre comment renommer
Pour renommer vous utilisez la syntaxe suivante
Exemple:
Vous pouvez maintenant supprimer en toute sécurité l'ancienne base de données de la manière suivante
Maintenant, pensez à ce qui se passe si vous essayez de renommer le nouveau nom de la base de données avec le nom de la base de données existante
Exemple:
Ainsi, dans ce contexte, toutes les collections (tables) de tests seront copiées dans la base de données des films .
la source
copyDatabase
est parti. J'ai poussé SERVER-701 avec mes notes .Bien que Mongodb ne fournisse pas la commande rename Database, il fournit la commande r ename Collection , qui non seulement modifie le nom de la collection, mais aussi le nom de la base de données.
Cette commande ne fait que modifier les métadonnées, le coût est très faible, il suffit de parcourir toutes les collections sous
db1
, renommédb2
pour obtenir renommer le nom de la base de données.vous pouvez le faire dans ce script Js
la source
foo
dans labar
base de données a un espace de noms debar.foo
. L'index sur a_id
donc l'espace de nomsbar.foo._id_
. Renommant la collection (devrait) effectuer une recherche de préfixe et remplacer tous les espaces de noms , il est au courant, similaire au--nsFrom
et--nsTo
optionsmongorestore
.Le processus ci-dessus est lent, vous pouvez utiliser la méthode ci-dessous mais vous devez déplacer collection par collection vers une autre base de données.
la source
Il n'existe aucun mécanisme pour renommer les bases de données. La réponse actuellement acceptée au moment de la rédaction est factuellement correcte et offre quelques détails de fond intéressants quant à l'excuse en amont, mais n'offre aucune suggestion pour reproduire le comportement. D'autres réponses pointent vers
copyDatabase
, ce qui n'est plus une option car la fonctionnalité a été supprimée dans 4.0 . J'ai mis à jour le SERVER-701 avec mes notes et mon incrédulité. 🙃Un comportement équivalent implique
mongodump
etmongorestore
dans un peu de danse:Exportez vos données en prenant note des "espaces de noms" utilisés. Par exemple, sur l'un de mes ensembles de données, j'ai une collection avec l'espace de noms
byzmcbehoomrfjcs9vlj.Analytics
- ce préfixe (en fait le nom de la base de données ) sera nécessaire à l'étape suivante.Importez vos données, vos fournitures
--nsFrom
et vos--nsTo
arguments. ( Documentation. ) Poursuivant mon exemple hypothétique (et extrêmement illisible) ci-dessus, pour restaurer un nom plus sensé, j'invoque:Certains peuvent également pointer l'
--db
argument de mongorestore, mais cela aussi est obsolète et déclenche un avertissement contre l'utilisation sur les sauvegardes de dossiers non BSON avec une suggestion complètement erronée de "use --nsInclude instead
". La traduction de l'espace de noms ci-dessus équivaut à l'utilisation de l'--db
option et est la configuration de manipulation d'espace de noms correcte à utiliser car nous n'essayons pas de filtrer ce qui est en cours de restauration.la source
--nsFrom
et a--nsTo
travaillé pour moi. Je vous remercie!J'ai essayé de faire.
et a appris qu'il a été déprécié par la communauté mongo bien qu'il ait créé la sauvegarde ou renommé DB.
Donc, pas convaincu de l'approche ci-dessus, j'ai dû prendre Dump of local en utilisant la commande ci-dessous
connecté à Db.
puis
puis restauré la base de données avec la commande.
la source
Dans le cas où vous placez toutes vos données dans la base de données d'administration (vous ne devriez pas), vous remarquerez que
db.copyDatabase()
cela ne fonctionnera pas car votre utilisateur nécessite de nombreux privilèges que vous ne voulez probablement pas lui donner. Voici un script pour copier la base de données manuellement:la source