Copie a coleção mongodb entre dois servidores e diferentes versões do mongo…

3

Eu tenho uma coleção em um mongoDB, em um projeto que é executado localmente, e tenho que copiar a coleção para o servidor dev. Você pode me dizer como fazer isso, considerando que:

  1. A máquina local (a fonte) é acessível a partir do exterior, mas apenas com o IP.

  2. A versão do mongo local é 2.0.4, enquanto a versão do mongo no servidor dev é 2.2.2.

Fiz uma pequena pesquisa, mas não tenho certeza sobre algumas coisas ... como, por exemplo, quais credenciais devo escolher para o banco de dados de origem? ... aqueles para conexão SSH? ... ou ...? ...

Agradecemos antecipadamente:)

    
por pesho hristov 30.03.2014 / 14:04

5 respostas

3

Você pode criar outra conexão a partir do servidor de destino e usar a função save() .

Por exemplo:

conn2 = new Mongo( "desitination_server:port")

desti_db = conn2.getDB( "destination_db_name" ) --> now you can access destination mongodb server from source DB connection.

db.sourceCollection.find().forEach( function(x){ desti_db.targetCollectionName.save(x) } ); --> read current source DB collection and save it in destination mongodb

    
por 08.10.2015 / 21:48
2

A melhor solução que consegui para think of é esta:

  1. Eu fiz um dump dos dados da coleção de origem:

db.prices.find()

  1. Modifique o resultado (lista de JSONs) de algo como

{"_id" : ObjectId("..."), "action" : "show", "price" : 12 } {"_id" : ObjectId("..."), "action" : "hide", "price" : 10 } {"_id" : ObjectId("..."), "action" : "poke", "price" : 20 } ................

para um tal (adicionado "," após cada JSON, removeu o ID, então eu tenho uma matriz no final):

[ {"action" : "show", "price" : 12 }, {"action" : "hide", "price" : 10 }, {"action" : "poke", "price" : 20 } ................ ]

Em seguida, passe essa nova matriz de JSONs para o método de inserção da nova coleção: (copiei o array na área de transferência, diretamente do editor de texto que usei para fazer isso)

db.prices.inset( + Shift + Inserir + )

E voila :) ... todos os seus dados são transferidos :) ...

    
por 31.03.2014 / 09:58
2
Em primeiro lugar, aconselho-o a actualizar as suas versões do MongoDB - tanto as suas versões locais como dev são muito antigas, e você deve ter ambas na mesma versão, se possível. As versões 2.0 e 2.2 são muito diferentes (sem bloqueio global em 2.2) e ambos tiveram várias versões estáveis desde as versões listadas. Por fim, as duas versões são consideradas fim de vida .

Quanto a como transferir dados entre eles, você tem várias opções, mas se os dados forem relativamente pequenos, as opções mais fáceis são mongodump . Simplesmente use isto para descarregar os dados locais que você deseja transferir para o BSON (irá incluir índices, etc., se você pegar uma coleção inteira ou banco de dados) e então usar mongorestore para inserir esses dados no banco de dados dev. Mais uma vez, eu recomendaria usar uma versão mais nova do mongodump / mongorestore do que 2.2.2 ou 2.0.4 - houve vários bugs corrigidos com as ferramentas em versões posteriores que você pode usar de outra forma (as versões posteriores das ferramentas devem ser compatíveis com versões anteriores ).

Em termos de outras opções, se você estiver usando um banco de dados inteiro, poderá simplesmente copiar todo o conjunto de arquivos desse banco de dados do host local para o servidor dev. Você precisaria reiniciar o banco de dados e isso significaria limpar esse banco de dados toda vez no servidor dev, mas, dependendo das suas necessidades, poderia ser uma opção. Você também pode olhar para o conector mongo como uma forma de espelhar seus dados entre local e dev em um tempo mais real e moda contínua. Provavelmente, há algumas outras maneiras de conseguir isso também, mas estas são as mais simples.

    
por 31.03.2014 / 10:43
1

Por que você não tenta o db.cloneCollection ()? link

você executaria db.cloneCollection (from_instance, collection_name, query) na instância dev mongodb. from_instance seria o IP e o endereço da porta da instância local. E a consulta é opcional - se não for inserida, todos os documentos da coleção de origem serão extraídos.

então, algo como: db.cloneCollection ("12.34.56.78:27017", "mydb.mycollectionname")

    
por 12.04.2014 / 17:10
0

MongoCopyPaste: procure por qualquer registro no servidor remoto. Copie e cole no servidor de destino. De uma a muitas coleções.

link

    
por 01.05.2017 / 15:18

Tags