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