MongoDB – Parte 2 – Operações com o repositório.

Olá meu caro leitor, presumindo que você já tenham lido a  parte 1 deste tutorial e já possua o MongoDB devidamente instalado em sua máquina, vou mostrar abaixo alguns principios e comandos principais para listar, salvar, alterar e deletar itens de sua coleção.

Primeiramente vamos definir o escopo de nossa coleção, vamos criar uma agenda onde vamos inserir nossos contatos, a estrutura básica que um contato deve ter é o nome, telefone, email e uma lista de endereços.

Um endereço deve possuir  rua, número, bairro, cidade e tipo (residencial ou comercial), estrutura bem simples somente para fixar os conceitos e as operações básicas.

Para realizar os comandos e testes abaixo eu utilizei o Visual Studio Code para editar os comandos  e também usei o terminal de comandos que já vem integrado a ele para facilitar.

Para acessar esse terminal no VSC basta acessar o menu View->Integrated Terminal, agora vamos colocar a mão na massa!

Alguns comandos importantes:

  • mongod –version (mostra a versão do MongoDB que está rodando em sua máquina);
  • mongo (acessa o MongoDB em qualquer diretório);
  • show databases (lista os databases criados).

A imagem abaixo ilustra a utilização dos comandos acima:

mongo5

Para criar um database vamos utilizar o seguinte comando:

db.createCollection("Agenda")

Quando efetuar a criação de um database o MongoDB deve retornar uma mensagem de OK como na imagem abaixo:

mongo6

No caso de precisar deletar uma base de dados execute os seguintes comandos:

mongo7

Vamos agora inserir o primeiro contato em nossa agenda, para isso digite o comando:

use Agenda

Esse comando habilita seu database para edição.

Vamos agora digitar o comando de insert:

db.Agenda.insert({"nome": "Marcelo", "telefone":"(011) 982039191","email":"marcelo@teste.com"}) 

Se tudo correu bem o MongoDB deverá retornar uma mensagem :

WriteResult({ "nInserted" : 1 })

Vamos agora já verificar a operação de consulta, digite no terminal o seguinte comando:

db.Agenda.find();

O resultado deverá trazer todos os contatos cadastrados, porém listados de uma forma não amigável de leitura. Para tornar o resultado melhor digite o comando:

 db.Agenda.find().pretty();

O pretty vai listar os registros e formatar o json facilitando a leitura e entendimento da estrutura.

A imagem abaixo demonstra as operações:

mongo8

Vamos agora inserir outro registro, agora com endereços, note que o registro acima não possui endereços, é possivel incluir documentos com mais ou menos propriedades.

Uma observação, digitar os comandos no terminal pode ser ruim e desconfortável, você pode digitar os mesmos em seu editor preferido e colar no terminal para aplicar. No insert abaixo eu digitei os comandos em um arquivo .js que facilita a escrita e leitura e colei para aplicar no terminal:

mongo9

Para deletar todos os registros de sua coleção basta digitar o seguinte código:

db.Agenda.remove({});

Depois de deletar todos os registros vamos inserir outros contatos na agenda para efetuar as operações de select, adicionei a propriedade profissão nos novos contatos, basta copiar e colar no prompt de comando para inserir:

db.Agenda.insert({
    nome: "Marcelo",
    email: "marcelo@teste.com.br",
    telefone: "(011) 982039999",
    profissao: "Desenvolvedor",
    enderecos: [{
            rua: "Rua teste marcelo",
            numero: "10",
            bairro: "Centro",
            cidade: "São Paulo",
            estado: "São Paulo",
            tipo: "residencial"
        },
        {
            rua: "Rua teste marcelo",
            numero: "10",
            bairro: "Centro",
            cidade: "São Paulo",
            estado: "São Paulo",
            tipo: "comercial"
        }
    ]
});
db.Agenda.insert({
    nome: "Gustavo",
    email: "gustavo@teste.com.br",
    telefone: "(011) 982039999",
    profissao: "Engenheiro",
    enderecos: [{
            rua: "Rua teste gustavo",
            numero: "10",
            bairro: "Centro",
            cidade: "São Paulo",
            estado: "São Paulo",
            tipo: "residencial"
        },
        {
            rua: "Rua teste gustavo",
            numero: "10",
            bairro: "Centro",
            cidade: "São Paulo",
            estado: "São Paulo",
            tipo: "comercial"
        }
    ]
});
db.Agenda.insert({
    nome: "Joao",
    email: "joao@teste.com.br",
    telefone: "(011) 982039991",
    profissao: "Arquiteto",
    enderecos: [{
            rua: "Rua teste joao",
            numero: "20",
            bairro: "Centro",
            cidade: "São Paulo",
            estado: "São Paulo",
            tipo: "residencial"
        },
        {
            rua: "Rua teste joao",
            numero: "20",
            bairro: "Centro",
            cidade: "São Paulo",
            estado: "São Paulo",
            tipo: "comercial"
        }
    ]
});
db.Agenda.insert({
    nome: "Maria",
    email: "maria@teste.com.br",
    telefone: "(011) 982039992",
    profissao: "Secretaria",
    enderecos: [{
        rua: "Rua teste maria",
        numero: "20",
        bairro: "Centro",
        cidade: "São Paulo",
        estado: "São Paulo",
        tipo: "residencial"
    }]
});
db.Agenda.insert({
    nome: "Pedro",
    email: "pedro@teste.com.br",
    telefone: "(011) 982039992",
    profissao: "Desenvolvedor",
    enderecos: [{
        rua: "Rua teste pedro",
        numero: "20",
        bairro: "Centro",
        cidade: "Santos",
        estado: "São Paulo",
        tipo: "residencial"
    }]
});
db.Agenda.insert({
    nome: "Antonio",
    email: "antonio@teste.com.br",
    telefone: "(011) 982039992",
    profissao: "Veterinario",
    enderecos: [{
        rua: "Rua teste antonio",
        numero: "20",
        bairro: "Centro",
        cidade: "Santos",
        estado: "São Paulo",
        tipo: "residencial"
    }]
});

Como consultar dados?

Para consultar os dados é relativamente fácil, vou colocar alguns exemplos abaixo, já vimos acima a utilização do  comando find()  e do comando pretty().

Consultar todos contatos com o nome de “Antonio”

db.Agenda.find({ nome : "Antonio"}).pretty();

Consultar todos os contatos que possuem endereço comercial:

db.Agenda.find({"enderecos.tipo" : "comercial"}).pretty();

Consultar todos os contatos que residam na cidade de Santos:

db.Agenda.find({"enderecos.cidade" : "Santos"}).pretty();

Consultar todos os contatos que são engenheiros ou desenvolvedores:

db.Agenda.find({$or : [{"profissao": "Desenvolvedor"}, {"profissao": "Engenheiro"}]});

Consultar apenas um contato:

db.Agenda.findOne({"profissao": "Desenvolvedor"});
Consultar a lista em ordem alfábética:
db.Agenda.find().sort({"nome" : 1});
Podemos ainda utilizar o -1 para que os nomes venham na ordem contrária:
db.Agenda.find().sort({"nome" : -1});

Limitando o número de registros que queremos visualizar:

db.Agenda.find().sort({"nome" : 1}).limit(3);

Consultar no MongoDB é relativamente fácil e ele possui muitos recursos para efetuar suas consultas, para maiores detalhes dê um pulo na documentação.

Como alterar registros?

Para alterar um registro vamos primeiramente localiza-lo usando o comando find e procurando pelo id:

db.Agenda.find({"_id" : ObjectId("58e3a68c64efe176a32c63f1")}).pretty();

O comando acima me retonou o contato com nome de “Antonio” e agora vou alterar o email do “Antonio” para “antonio.santos@teste.com.br”:

db.Agenda.update({"_id" : ObjectId("58e3a68c64efe176a32c63f1")}, {$set : {"email" : "antonio.santos@teste.com.br"}});

Como excluir registros?

Para excluir um registro basta utilizar o comando remove passando o id do objeto:

db.Agenda.remove({"_id" : ObjectId("58e3a68c64efe176a32c63f1")});

Essas foram algumas operações básicas com o MongoDB, existe muito mais opções para serem descobertas na documentação.

Todas essas operações foram feitas em linha de comando, muitas pessoas não gostam dessa abordagem e preferem aplicativos para operar um banco de dados como o sql developer ou o Toad para o ORACLE ou o Sql Server Management Studio para o SQL SERVER, o MongoDB possui alguns clients para operação, eu indico o uso do Robomongo como ferramenta de administração, é bem tranquilo e fácil de operar.

robomongo

No próximo artigo desta série vamos integrar o MongoDB com o .NET, espero ter passado um pouco de conhecimento e facilitar a todos os leitores a imersão no mundo NOSQL!

Dúvidas e opiniões são sempre bem vindas!

Até mais!

 

6 comments

Leave a Reply

O seu endereço de e-mail não será publicado.