MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So klonen Sie eine Sammlung von einer MongoDB zu einer anderen auf demselben Server

Ein paar Dinge :

  1. Im Allgemeinen cloneCollection wird für verschiedene Mongo-Instanzen verwendet, aber nicht zum Kopieren auf dieselben Instanzen.
  2. Auch wenn Sie v4.2 verwenden Sie sollten aufhören, copyDB zu verwenden &cloneCollection weil sie veraltet sind Kompatibilität-mit-v4.2 &beginnen Sie mit der Verwendung von mongodump und mongorestore oder mongoexport &mongoimport .
  3. Ich würde vorschlagen, mongodump zu verwenden &mongorestore :

    1. Verursache mongodump würde die Datentypen von MongoDB beibehalten, dh; bson Typen.
    2. mongodump erstellt ein binäres Where als mongoexport würde bson umwandeln zu json &wieder mongoimport konvertiert json zu bson beim Schreiben, weshalb sie langsam sind. Sie können mongoexport &mongoimport verwenden, wenn Sie Ihre Sammlungsdaten visuell analysieren oder json verwenden möchten Daten für andere Zwecke.
  4. Sie können das folgende Skript in der Shell ausführen

    declare - a collections = ("collectionName1" "collectionName2")
    for i in "${collections[@]}"
    do
    echo "$i"
        mongodump --host "All-shards" --username=uname --password password --ssl --authenticationDatabase admin --db dbname --collection "$i"
    
        mongorestore --host=host-shard-name --port=27017 --username=uname --password=psswrd --ssl --authenticationDatabase=admin --db=dbname --collection= "$i" ./dump/dbName/"$i".bson;
    done
    

Um mongodump zu verwenden , müssen Sie mongodump für eine laufende mongod- oder mongos-Instanz ausführen. Diese Befehle werden also in der Erwartung ausgeführt, dass Mongo ordnungsgemäß installiert ist und die Pfadeinstellung gut ist. Wenn nicht, können Sie zum Mongo-Ordner navigieren und wie ./mongodump ausführen &./mongorestore . Das obige Skript ist nützlich, wenn Sie mehrere Sammlungen sichern möchten. Sie müssen einige Dinge im Skript angeben, z. B. :

  1. mongodump--host "All-shards" -> Hier müssen Sie alle Shards angeben, wenn Ihre MongoDB ein Replikatsatz ist, wenn nicht, können Sie localhost:27017 angeben .

  2. mongorestore --host=host-shard-name -> Sie müssen einen Shard des Replikatsatzes angeben, andernfalls Ihren localhost , Einige Dinge hier können optional sein --ssl , --username , --password .

  3. Also mongodump erstellt einen Ordner namens dump zum ersten Mal, das die Unterordner mit dbNames haben wird, und jeder Unterordner wird bson haben Dateien entsprechend ihrer Sammlungsnamen ausgegeben, Sie müssen also auf dbName verweisen im Wiederherstellungsbefehl und Sammlungsname wird aus Variable i genommen -> ./dump/dbName/"$i".bson

Hinweis: MongoDB v3.2 ist so alt und im Cloud-basierten MongoDB-Dienst Mongo-atlas Es hat bereits das Ende seines Lebenszyklus erreicht, also aktualisieren Sie bitte so schnell wie möglich. Wenn Sie nach einer kostenlosen Mongo-Instanz suchen oder mit MongoDB beginnen, können Sie Atlas ausprobieren.