Table of Contents
_O autor selecionou a COVID-19 Relief Fund para receber uma doação como parte do programa Write for DOnations._
Introdução
O MongoDB é um dos mecanismos de banco de dados NoSQL mais populares. Ele é famoso por ser escalável, poderoso, confiável e fácil de usar. Neste artigo, vamos mostrar como importar e exportar seus bancos de dados MongoDB.
Devemos deixar claro que ao dizer importação e exportação, estamos nos referindo àquelas operações que lidam com dados em um formato legível para humanos e compatível com outros produtos de software. Em contrapartida, as operações de backup e restauração criam ou usam dados binários específicos do MongoDB, que preservam a consistência e integridade dos seus dados, além de seus atributos específicos do MongoDB. Assim, para a migração, geralmente é preferível usar o backup e restauração, desde que os sistemas de origem e de destino sejam compatíveis.
As tarefas de backup, reinicialização e migração estão além do escopo deste artigo. Para obter mais informações, consulte Como fazer backup, restaurar e migrar um banco de dados MongoDB no Ubuntu 20.04.
Pré-requisitos
Para concluir este tutorial, você precisará do seguinte:
- Um Droplet Ubuntu 20.04 configurado conforme o Guia de configuração inicial de servidor do Ubuntu 20.04, incluindo um usuário sudo não root e um firewall.
- O MongoDB instalado e configurado usando o artigo Como instalar o MongoDB no Ubuntu 20.04.
- Saber as diferenças entre os dados JSON e BSON no MongoDB. Para uma discussão detalhada, leia Passo 1 — Usando o JSON e BSON no MongoDB em nosso tutorial, Como fazer backup, restaurar e migrar um banco de dados MongoDB no Ubuntu 20.04.
Passo 1 — Importando informações para o MongoDB
Para aprender como funciona a importação de informações para o MongoDB, vamos usar como exemplo um banco de dados MongoDB popular sobre restaurantes. Ele está no formato .json e pode ser baixado usando o wget desta forma:
wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
Assim que o download terminar, você terá um arquivo chamado primer-dataset.json (com tamanho de 12 MB) no diretório atual. Vamos importar os dados desse arquivo para um novo banco de dados chamado newdb e para uma coleção chamada restaurants.
Use o comando mongoimport desta forma:
sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json
O resultado ficará parecido com este:
[secondary_label Output]
2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/
2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import
Como o comando acima mostra, 25359 documentos foram importados. Como não tínhamos um banco de dados chamado newdb, o MongoDB o criou automaticamente.
Vamos verificar a importação.
Conecte-se ao banco de dados newdb recém-criado:
sudo mongo newdb
Agora, você está conectado à instância de banco de dados newdb. Note que seu prompt mudou, indicando que você está conectado ao banco de dados.
Conte os documentos na coleção de restaurantes com o comando:
db.restaurants.count()
O resultado mostrará 25359, que é o número de documentos importados. Para uma verificação ainda melhor, selecione o primeiro documento da coleção de restaurantes desta forma:
db.restaurants.findOne()
O resultado ficará parecido com este:
[secondary label Output]
{
"_id" : ObjectId("5fac3d937f12c471b3f26733"),
"address" : {
"building" : "1007",
"coord" : [
-73.856077,
40.848447
],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery",
"grades" : [
{
"date" : ISODate("2014-03-03T00:00:00Z"),
"grade" : "A",
"score" : 2
},
...
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}
Uma verificação detalhada como essa poderia revelar problemas com os documentos, como seu conteúdo, codificação, etc. O formato json usa a codificação UTF-8 e suas exportações e importações devem estar naquela codificação. Tenha isso em mente se for editar manualmente algum arquivo json. Caso contrário, o MongoDB manuseará ele automaticamente para você.
Para sair do prompt do MongoDB, digite exit no prompt:
exit
Você será enviado de volta ao prompt de linha de comando normal como seu usuário não raiz.
Passo 2 — Exportando informações do MongoDB
Como mencionado anteriormente, ao exportar informações do MongoDB, é possível adquirir um arquivo de texto legível para humanos com seus dados. Por padrão, as informações são exportadas no formato json, mas também é possível exportar para csv (valores separados por vírgula).
Para exportar informações do MongoDB, use o comando mongoexport. Ele permite fazer uma exportação bastante refinada, sendo possível especificar um banco de dados, uma coleção, um campo e até mesmo usar uma consulta para a exportação.
Um exemplo de mongoexport simples seria exportar a coleção de restaurantes do banco de dados newdb que importamos anteriormente. Isso pode ser feito desta forma:
sudo mongoexport --db newdb -c restaurants --out newdbexport.json
No comando acima, usamos o --db para especificar o banco de dados, -c para a coleção e --out para o arquivo no qual os dados serão salvos.
O resultado de um mongoexport executado com sucesso deve ser parecido com este:
[secondary_label Output]
2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/
2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%)
2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%)
2020-11-11T19:39:58.871+0000 exported 25359 records
O resultado acima mostra que 25359 documentos foram importados — o mesmo número dos importados.
Em alguns casos, pode ser necessário exportar apenas uma parte da sua coleção. Considerando a estrutura e o conteúdo do arquivo json de restaurantes, vamos exportar todos os restaurantes que satisfaçam os critérios de estar localizado no bairro do Bronx e ser de cozinha chinesa. Se quisermos obter essas informações diretamente enquanto conectados ao MongoDB, conecte-se novamente ao banco de dados:
sudo mongo newdb
Então, use esta consulta:
db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )
Os resultados são exibidos no terminal:
[secondary_label Output]
2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
2020-12-03T01:35:25.410+0000 exported 323 records
Para sair do prompt do MongoDB, digite exit:
exit
Se quiser exportar os dados de uma linha de comando sudo sem estar conectado ao banco de dados, incorpore a consulta anterior no comando mongoexport especificando-a no argumento -q desta forma:
sudo mongoexport --db newdb -c restaurants -q "{\"borough\": \"Bronx\", \"cuisine\": \"Chinese\"}" --out Bronx_Chinese_retaurants.json
Note que estamos adicionando o caractere de escape de barra invertida (“) nas aspas duplas da consulta. De maneira similar, é necessário adicionar o caractere de escape a qualquer outro caractere especial na consulta.
Se a exportação tiver sido bem-sucedida, o resultado se parecerá com este:
[secondary_label Output]
2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/
2020-11-11T19:49:21.765+0000 exported 323 records
O exemplo acima mostra que 323 registros foram exportados, e é possível encontrá-los no arquivo Bronx_Chinese_retaurants.json que especificamos.
Use o cat e less para analisar os dados:
cat Bronx_Chinese_retaurants.json | less
Use o SPACE para paginar os dados:
[secondary_label Output]
date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
. . .
Pressione q para sair. Agora, é possível importar e exportar um banco de dados MongoDB.
Conclusão
Este artigo introduziu as informações essenciais sobre a importação e exportação de e para um banco de dados MongoDB. Continue a leitura com Como fazer backup, restaurar e migrar um banco de dados MongoDB no Ubuntu 20.04.
Considere também o uso da replicação. A replicação permite continuar executando seu serviço MongoDB ininterruptamente a partir de um servidor MongoDB subordinado enquanto estiver restaurando o mestre depois de uma falha. Parte da replicação é o registro de operações (oplog), que registra todas as operações que modificam seus dados. É possível usar esse registro, assim como usaria o registro binário no MySQL, para restaurar seus dados depois que o último backup tiver sido realizado. Lembre-se que os backups geralmente são realizados durante a noite, e se quiser restaurar um backup durante a tarde, você estará perdendo todas as atualizações desde o último backup.