Execução de Bloco de Comandos no MongoDB

Todo DBA que atua com MongoDB, sabe o trabalho que dá de rodar vários comandos que nos são enviados, como: inserts, updates e etc na linha de comando do MongoDB e se deparar com algumas limitações do terminal, ocasionando erro na execução, e desta forma nos força a realizar a execução aos poucos o que é inviável quando se tem muitos comandos a serem executados.


Uma maneira simples que temos para contornar isso e que podemos orientar os Devs ou ADs, é executar estes vários comandos no MongoDB com a função: Load.

Como funciona? Nós basicamente colocamos todos os comandos em um único arquivo texto por exemplo e executamos estes comandos com Load, como a mesma ideia de rodar um bloco anônimo do PLSQL ou a execução de uma arquivo externo no SQL Plus no Oracle Database para você ter uma idéia.

Vamos lá, vamos a um exemplo. Crie o banco e a collection: unidade_federativa, como abaixo:

> use dbComandos
switched to db dbComandos

> db.createCollection("unidade_federativa")
{ "ok" : 1 }
>

Vamos inserir dois estados, porém, repare que a sigla de cada unidade federativa está errada propositalmente, para assim corrigirmos com um bloco de comandos:

> db.unidade_federativa.insert(
...  {
...   "UF": "São Paulo",
...   "SIGLA": "RJ"
...  }
... )
WriteResult({ "nInserted" : 1 })

> db.unidade_federativa.insert(
...  {
...   "UF": "Rio de Janeiro",
...   "SIGLA": "MG"
...  }
... )
WriteResult({ "nInserted" : 1 })
>

> db.unidade_federativa.find()
{ "_id" : ObjectId("5a3969dfa31906cdb3d3c37c"), "UF" : "São Paulo", "SIGLA" : "RJ" }
{ "_id" : ObjectId("5a3969eda31906cdb3d3c37d"), "UF" : "Rio de Janeiro", "SIGLA" : "MG" }
>

Certo, agora crie um arquivo .txt com dois updates que irão corrigir as siglas erradas. Repare que eu coloquei um print, para nos informar quando iniciou e quando terminou a execução. Nosso arquivo pode se chamar: bloco.txt, com todos os comandos como abaixo:

[mongo@server01]$ cat bloco.txt
print('Iniciando...');
db.getCollection('unidade_federativa').update( {SIGLA: "RJ"},{$set: {SIGLA: "SP"}});
db.getCollection('unidade_federativa').update( {SIGLA: "MG"},{$set: {SIGLA: "RJ"}});
print('Finalizado!');
[mongo@server01]$

Veja em qual diretório o arquivo foi criado, pois, precisaremos dele para informar ao Load:

[mongo@server01]$ pwd
/home/mongo

Certo. Neste momento execute a função load, como demonstrado abaixo, passando o diretório que está o arquivo de comandos que acabamos de criar e o nome do arquivo propriamente dito e acompanhe a execução:

> load('/home/mongo/bloco.txt')
Iniciando...
Finalizado!
true
>

Veja agora que as siglas foram atualizadas para o valor correto. Apenas carregamos o arquivo bloco.txt e executamos todo o bloco de comandos que havia dentro dele:

> db.unidade_federativa.find()
{ "_id" : ObjectId("5a3969dfa31906cdb3d3c37c"), "UF" : "São Paulo", "SIGLA" : "SP" }
{ "_id" : ObjectId("5a3969eda31906cdb3d3c37d"), "UF" : "Rio de Janeiro", "SIGLA" : "RJ" }
>

Fica a dica.

Abraço,

Ronaldo

Nenhum comentário:

Postar um comentário