sql >> Database >  >> NoSQL >> MongoDB

Hoe een verzameling van de ene MongoDB naar de andere op dezelfde server te klonen

Paar dingen:

  1. Over het algemeen cloneCollection wordt gebruikt voor verschillende mongo-instanties, maar niet om op dezelfde instanties te kopiëren.
  2. Ook als je v4.2 . gebruikt je moet stoppen met het gebruik van copyDB &cloneCollection omdat ze verouderd zijn compatibiliteit-met-v4.2 &begin mongodump te gebruiken en mongorestore of mongoexport &mongoimport .
  3. Ik zou willen voorstellen om mongodump . te gebruiken &mongorestore :

    1. Oorzaak mongodump zou de gegevenstypen van MongoDB behouden, d.w.z.; bson soorten.
    2. mongodump maakt een binair bestand waarin als mongoexport zou bson . converteren naar json &nogmaals mongoimport converteert json naar bson tijdens het schrijven, daarom zijn ze traag. U kunt mongoexport &mongoimport gebruiken wanneer u uw collectiegegevens visueel wilt analyseren of json wilt gebruiken gegevens voor enig ander doel.
  4. U kunt onderstaand script in shell uitvoeren

    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
    

mongodump gebruiken , moet u mongodump uitvoeren tegen een draaiende mongod of mongos-instantie. Dus deze commando's worden uitgevoerd in de verwachting dat Mongo correct is geïnstalleerd en de padinstelling goed is, zo niet, dan kunt u naar de Mongo-map navigeren en uitvoeren zoals ./mongodump &./mongorestore . Bovenstaand script is handig als u een back-up van meerdere collecties wilt maken. U hoeft een paar dingen in het script op te geven, zoals:

  1. mongodump--host "All-shards" -> Hier moet je alle shards specificeren als je MongoDB een replicaset is, zo niet, dan kun je localhost:27017 specificeren .

  2. mongorestore --host=host-shard-name -> Je moet één shard van de replicaset specificeren, anders je localhost , Weinig dingen hier kunnen optioneel zijn --ssl , --username , --password .

  3. Dus mongodump maakt een map aan met de naam dump voor de eerste keer die de submappen met dbNames zal hebben en elke submap heeft bson bestanden respectievelijk naar hun verzamelingsnamen zijn gedumpt, dus u moet verwijzen naar dbName in restore commando &collectienaam wordt overgenomen van variabele i -> ./dump/dbName/"$i".bson

Opmerking: MongoDB v3.2 is zo oud en in de cloud gebaseerde MongoDB-service Mongo-atlas het is al aan het einde van de levenscyclus, dus upgrade zo snel mogelijk. Als u op zoek bent naar een gratis mongo-instantie of wilt beginnen met MongoDB, kunt u atlas proberen.



  1. Gebruik LINQ in C# om MondoDB-records te vinden wanneer waarden in een lijstveld overeenkomen met een criteriumwaarde uit een lijst

  2. Een subdocumentverzameling opvragen met MongoDB en C#-stuurprogramma

  3. Hoe 2 mongodb-collecties vergelijken?

  4. $uitgeschakeld op meerdere velden in mongodb