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