MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como clonar uma coleção de um MongoDB para outro no mesmo servidor


Poucas coisas :
  1. Em geral, cloneCollection é usado para diferentes instâncias do mongo, mas não para copiar nas mesmas instâncias.
  2. Também se você estiver usando a v4.2 você deve parar de usar copyDB &cloneCollection porque eles estão obsoletos compatibilidade-com-v4.2 e comece a usar mongodump e mongorestore ou mongoexport &mongoimport .

  3. Sugiro usar mongodump &mongorestore :
    1. Causa mongodump preservaria os tipos de dados do MongoDB, ou seja; bson tipos.
    2. mongodump cria um binário onde como mongoexport converteria bson para json e novamente mongoimport converterá json para bson enquanto escreve, e é por isso que eles são lentos. Você pode usar mongoexport &mongoimport quando quiser analisar visualmente seus dados de coleções ou usar json dados para qualquer outra finalidade.

  4. Você pode executar o script abaixo no 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
    

Para usar o mongodump , você deve executar o mongodump em uma instância mongod ou mongos em execução. Portanto, esses comandos estão sendo executados esperando que o mongo esteja instalado corretamente e a configuração do caminho seja boa, caso contrário, você pode navegar para a pasta mongo e executar como ./mongodump &./mongorestore . O script acima será útil se você quiser fazer backup de várias coleções, você precisa especificar algumas coisas no script, como:

  1. mongodump--host "All-shards" -> Aqui você precisa especificar todos os shards se o seu MongoDB for um conjunto de réplicas, caso contrário, você pode especificar localhost:27017 .

  2. mongorestore --host=host-shard-name -> Você deve especificar um fragmento de conjunto de réplicas, senão seu localhost , Poucas coisas aqui podem ser opcionais --ssl , --username , --password .
  3. Então mongodump irá criar uma pasta chamada dump pela primeira vez que terá as subpastas com dbNames e cada subpasta terá bson arquivos respectivos aos seus nomes de coleção despejados, então você precisa consultar dbName no comando de restauração e o nome da coleção será obtido da variável i -> ./dump/dbName/"$i".bson

Observação: MongoDB v3.2 é tão antigo e no serviço MongoDB baseado em nuvem Mongo-atlas ele já atingiu o fim do ciclo de vida, portanto, atualize o mais rápido possível. Se você está procurando uma instância mongo gratuita ou começando com o MongoDB - você pode tentar o atlas.