Mein MongoDB-Datenbankname enthält einen Tippfehler und ich möchte die Datenbank umbenennen.
Ich kann so kopieren und löschen ...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
Gibt es einen Befehl zum Umbenennen einer Datenbank?
copyDatabase
ist ebenfalls veraltetAntworten:
Nein, gibt es nicht. Siehe https://jira.mongodb.org/browse/SERVER-701
quelle
Sie könnten dies tun:
Anmerkung der Redaktion: Dies ist der gleiche Ansatz, der in der Frage selbst verwendet wird, hat sich jedoch für andere als nützlich erwiesen.
quelle
copyDatabase
Methode handeltcopyDatabase
Methode * unnötig ist und daher eine schlechtere Lösung darstellt, die dem OP bereits bekannt war. * cc @GurbakhshishSinghAlternative Lösung: Sie können Ihre Datenbank sichern und unter einem anderen Namen wiederherstellen. Wie ich erlebt habe, ist es viel schneller als
db.copyDatabase()
.http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
quelle
mongodump
erstellt. Wusste nicht, dass Sie es unter einem anderen Namen wiederherstellen können. Vielen Dank!--gzip
ein Archiv verwenden und erstellendb.copyDatabase()
jetzt veraltet ist--db
(-d
) selbst ebenfalls veraltet ist. Es hat anscheinend eine Art Abwertungsparty stattgefunden, vorausgesetzt, siecopyDatabase
ist auch weg. Ich habe SERVER-701 mit meinen Notizen angestochert .ALERT : Hey Leute, seid beim Kopieren der Datenbank nur vorsichtig, wenn ihr die verschiedenen Sammlungen unter einer einzigen Datenbank nicht durcheinander bringen wollt.
Im Folgenden erfahren Sie, wie Sie umbenennen
Zum Umbenennen verwenden Sie die folgende Syntax
Beispiel:
Jetzt können Sie die alte Datenbank auf folgende Weise sicher löschen
Stellen Sie sich nun vor, was passiert, wenn Sie versuchen, den neuen Datenbanknamen in den vorhandenen Datenbanknamen umzubenennen
Beispiel:
So ist in diesem Zusammenhang alle Sammlungen (Tabellen) der Tests werden kopiert Filme Datenbank.
quelle
copyDatabase
ist weg. Ich habe SERVER-701 mit meinen Notizen angestochert .Obwohl Mongodb den Befehl "Datenbank umbenennen" nicht bereitstellt, stellt es den Befehl "Sammlung umbenennen" bereit , mit dem nicht nur der Sammlungsname, sondern auch der Datenbankname geändert wird .
Dieser Befehl ändert nur die Metadaten, die Kosten sind sehr gering. Wir müssen nur alle Sammlungen durchlaufen
db1
, die umbenannt wurdendb2
, um den Namen der Datenbank umzubenennen.Sie können es in diesem Js-Skript tun
quelle
foo
in derbar
Datenbank genannte Sammlung einen Namespace vonbar.foo
. Der Index auf_id
hat also den Namespacebar.foo._id_
. Durch das Umbenennen der Sammlung (sollte) eine Präfixsuche und -ersetzung für alle ihm bekannten Namespaces durchgeführt werden, ähnlich wie bei--nsFrom
und--nsTo
Optionen fürmongorestore
.Der obige Vorgang ist langsam. Sie können die folgende Methode verwenden, müssen jedoch Sammlung für Sammlung in eine andere Datenbank verschieben.
quelle
Es gibt keinen Mechanismus zum Umbenennen von Datenbanken. Die zum Zeitpunkt des Schreibens derzeit akzeptierte Antwort ist sachlich korrekt und bietet einige interessante Hintergrundinformationen zur vorgelagerten Entschuldigung, bietet jedoch keine Vorschläge zur Replikation des Verhaltens. Andere Antworten zeigen auf
copyDatabase
, was keine Option mehr ist, da die Funktionalität in 4.0 entfernt wurde . Ich habe SERVER-701 mit meinen Notizen und Ungläubigkeit aktualisiert . 🙃Gleichwertiges Verhalten beinhaltet
mongodump
undmongorestore
in einem kleinen Tanz:Exportieren Sie Ihre Daten und notieren Sie sich die verwendeten "Namespaces". In einem meiner Datasets habe ich beispielsweise eine Sammlung mit dem Namespace
byzmcbehoomrfjcs9vlj.Analytics
- dieses Präfix ( eigentlich der Datenbankname ) wird im nächsten Schritt benötigt.Importieren Sie Ihre Daten, Lieferungen
--nsFrom
und--nsTo
Argumente. ( Dokumentation. ) Wenn ich mit meinem obigen hypothetischen (und äußerst unlesbaren) Beispiel fortfahre, um einen sinnlicheren Namen wiederherzustellen, rufe ich Folgendes auf:Einige mögen auch auf das
--db
Argument zu mongorestore verweisen, aber auch dies ist veraltet und löst eine Warnung vor der Verwendung bei Nicht-BSON-Ordnersicherungen mit einem völlig fehlerhaften Vorschlag an "use --nsInclude instead
" aus. Die obige Namespace-Übersetzung entspricht der Verwendung der--db
Option und ist das richtige Setup für die Namespace-Manipulation, da wir nicht versuchen, zu filtern, was wiederhergestellt wird.quelle
--nsFrom
und--nsTo
arbeitete für mich. Vielen Dank!Ich habe es versucht.
und erfuhr, dass es von der Mongo-Community veraltet ist, obwohl es das Backup erstellt oder die Datenbank umbenannt hat.
Also nicht überzeugt von dem obigen Ansatz, musste ich Dump of local mit dem folgenden Befehl nehmen
verbunden mit Db.
dann
Stellen Sie dann die Datenbank mit dem Befehl wieder her.
quelle
Wenn Sie alle Ihre Daten in die Admin-Datenbank stellen (sollten Sie nicht), werden Sie feststellen,
db.copyDatabase()
dass dies nicht funktioniert, da Ihr Benutzer viele Berechtigungen benötigt, die Sie wahrscheinlich nicht vergeben möchten. Hier ist ein Skript zum manuellen Kopieren der Datenbank:quelle