MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment cloner une collection d'un MongoDB à un autre sur le même serveur

Peu de choses :

  1. En général cloneCollection est utilisé pour différentes instances mongo mais pas pour copier sur les mêmes instances.
  2. Également si vous utilisez v4.2 vous devriez arrêter d'utiliser copyDB &cloneCollection car ils sont obsolètes compatibilité-avec-v4.2 &commencer à utiliser mongodump et mongorestore ou mongoexport &mongoimport .
  3. Je suggérerais d'utiliser mongodump &mongostore :

    1. Parce que mongodump préserverait les types de données de MongoDB, c'est-à-dire ; bson type.
    2. mongodump crée un binaire où comme mongoexport convertirait bson en json &encore mongoimport convertira json à bson lors de l'écriture, c'est pourquoi ils sont lents. Vous pouvez utiliser mongoexport &mongoimport lorsque vous souhaitez analyser visuellement les données de vos collections ou utiliser json données à toute autre fin.
  4. Vous pouvez exécuter le script ci-dessous dans le shell

    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
    

Pour utiliser mongodump , vous devez exécuter mongodump sur une instance mongod ou mongos en cours d'exécution. Donc, ces commandes sont exécutées en attendant que mongo soit correctement installé et que la configuration du chemin soit bonne, sinon vous pouvez accéder au dossier mongo et exécuter comme ./mongodump &./mongorestore . Le script ci-dessus sera utile si vous souhaitez sauvegarder plusieurs collections, vous devez spécifier quelques éléments dans le script comme :

  1. mongodump--host "All-shards" -> Ici, vous devez spécifier tous les fragments si votre MongoDB est un jeu de répliques, sinon vous pouvez spécifier localhost:27017 .

  2. mongorestore --host=host-shard-name -> Vous devez spécifier un fragment de jeu de répliques, sinon votre localhost , Peu de choses ici peuvent être facultatives --ssl , --username , --password .

  3. Alors mongodump va créer un dossier nommé dump pour la première fois qui aura les sous-dossiers avec dbNames &chaque sous-dossier aura bson fichiers respectifs à leurs noms de collection vidés, vous devez donc vous référer à dbName dans la commande de restauration et le nom de la collection sera extrait de la variable i -> ./dump/dbName/"$i".bson

Remarque : MongoDB v3.2 est si ancien et dans le service MongoDB basé sur le cloud Mongo-atlas il a déjà atteint la fin de son cycle de vie, veuillez donc mettre à niveau dès que possible. Si vous recherchez une instance mongo gratuite ou si vous démarrez avec MongoDB, vous pouvez essayer atlas.