Nas versões anteriores do MongoDB, você poderia usar o
db.collection.copyTo()
método para copiar uma coleção. Desde então, o MongoDB preteriu esse método. Além disso, a partir da versão 4.2, o MongoDB removeu o
eval
comando. Dado db.collection.copyTo()
envolve eval
, isso significa que você não pode usar nenhum deles se estiver usando o MongoDB 4.2 ou posterior. Felizmente, há outra maneira de copiar uma coleção do MongoDB.
Verificar ferramentas de banco de dados MongoDB
No MongoDB, você pode clonar uma coleção usando as ferramentas de banco de dados do MongoDB. Especificamente, você pode usar
mongodump
e mongorestore
. As ferramentas de banco de dados do MongoDB são um conjunto de utilitários de linha de comando para trabalhar com o MongoDB.
Se você não tem certeza se tem o MongoDB Database Tools instalado, tente executar os seguintes comandos em seu Terminal ou Prompt de Comando para verificar:
mongodump --version
mongorestore --version
Isso verifica especificamente o
mongodump
e mongorestore
versões. Se você não os tiver, você pode usar as instruções de instalação no site do MongoDB para instalar o MongoDB Database Tools em seu sistema.
Clone uma coleção para o mesmo banco de dados
Você precisa executar o
mongodump
e mongorestore
da linha de comando do seu sistema (por exemplo, um novo Terminal ou janela de prompt de comando). Não execute a partir do mongo
Concha. Aqui está um exemplo de código que clona uma coleção para o mesmo banco de dados:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
Nesse caso, fazemos backup dos
pets
coleta no PetHotel
banco de dados e restaure-o como pets2
no mesmo banco de dados. Isso usa
mongodump
para criar um arquivo de backup da coleção, então mongorestore
para restaurar essa coleção com um nome diferente. Fizemos isso despejando a coleção no fluxo de saída padrão e canalizando para mongorestore
. Veja o que cada parâmetro faz:
Parâmetro | Descrição |
---|---|
--archive | Grava a saída em um arquivo especificado ou, se o arquivo não for especificado, grava na saída padrão (stdout ). No nosso caso, o arquivo não foi especificado, então ele gravou na saída padrão. |
--db | Especifica o banco de dados que contém a coleção que queremos clonar. Neste caso, o banco de dados é chamado de PetHotel . |
--nsFrom | Especifica a coleção no arquivo de despejo. Esta é a coleção que queremos clonar. |
--nsTo | Especifica o nome da coleção que deve ser usada quando restaurada. No nosso caso, chamamos de pets2 . |
Copiar uma coleção para outro banco de dados
Você pode usar a mesma técnica para copiar a coleção para outro banco de dados. Nesse caso, você nem precisaria alterar o nome da coleção se não quiser.
Aqui está um exemplo:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Isso é muito semelhante ao exemplo anterior, exceto que nosso
--nsTo
argumento especifica PetHouse.pets
como a coleção de destino. Isso significa que a coleção clonada será chamada de
pets
, e estará localizado na PetHouse
banco de dados (em vez do original PetHotel
base de dados).