Agile Testers TechTalks | Test War Stories - Andreia Gaita @ Tech Lead do GitHub. Saiba mais aqui

Não seja um mongo com MongoDB


  • MVP

    Pessoal, esse artigo visa documentar um treinamento que eu dei para a equipe de QA da empresa CWI, alocada na Editora Abril - Iba sobre MongoDB.

    Banco de dados é um tema que eu sempre gostei e em um mundo onde o desenvolvimento ágil e automação são moda, banco de dados NoSql é algo que passa despercebido dentro da comunidade de testes. Mas vamos ao que interessa, e assim como no treinamento, a visão será explicar um pouco o conceito de banco de dados NoSql e destrinchar por comandos básicos que poderão ajudar bastante caso um dia precisem.

    Conceito de banco de dados NoSQL

    Vou falar sobre MongoDB, então vamos a parte da instalação:

    Instalação do MongoDB em ambiente MS (Optei por Microsoft porque nem toda a comunidade de testes entrou no mundo Linux).

    • Abrir o prompt de comando e digitar o seguinte comando:

    1.png

    2.png

    PS: Esse comando é para saber que tipo de arquitetura de sistema estamos trabalhando (se 32 bits ou 64 bits).

    • Acessar a URL http://www.mongodb.org/downloads e baixar a versão de Windows de acordo com a arquitetura informada no comando acima;
    • Descompactar o arquivo dentro da pasta raiz C:>;
    • Executar o comando abaixo:

    3.png

    • Criar a pasta “data” com o comando “md data”;
    • Entrar na pasta data e criar a pasta “db” com o comando “md db”;

    START MONGO

    Acessar a pasta C:\mongodb\bin\ e executar o comando “mongod” e em outro PROMPT, na mesma pasta, executar o comando “mongo”.
    **
    PS: O comando mongod da o start no ambiente, fazendo com que o mongo fique apto para trabalhar. A tela a seguir mostra o mongo em pleno funcionamento:**

    4.png

    Para saber se o mongo subiu, o comando mongo deixará a tela assim:

    5.png

    Por dentro do MongoDB

    O mongoDB é composto por bases de dados (dbs), coleções (collections) e documentos (documents), onde:
    **
    Database (dbs) –** Base de dados. No caso do mongoDB, não utiliza o padrão de um banco de dados relacional. No modelo convencional de banco de dados, uma informação está dividida em várias tabelas, reduzindo assim a redundância de informações, porém quando a quantidade de registros é muito grande, a busca se torna lenta, já no NoSQL, os registros encontram-se em geral agrupados, isso melhora a velocidade de busca, e em contrapartida, aumenta a repetição de informações.

    Documentos (Documents) – Registro armazenado dentro de uma coleção, em outras palavras, são os dados que compõe a base de dados;

    Coleções (collections) – É o agrupamento dos documentos na nossa base de dados.

    PS: Documentos dentro de uma coleção podem ter diferentes campos. Normalmente, todos os documentos em uma coleção tem um propósito.

    Como a utilização do mongo é padrão em todos os SOs, vou continuar com exemplos em telas do terminal do Linux (não se apeguem a tela e sim ao comando):

    Comando “show”: Comando utilizado para exibir, no nosso caso, vamos trabalhar com o show sempre para enxergarmos nossas bases de dados, collections, etc. Segue um exemplo de utilização do comando show:

    7.png

    Do lado esquerdo nós temos o nome da base de dados e do lado direito o espaço ocupado por registros dentro de cada base de dados. Importante ressaltar que nesse momento não estamos e não podemos realizar nenhuma ação dentro de cada uma delas, pois é necessário que eu “acesse a base de dados”.

    Comando “USE”:

    Definição: Utilizado tanto para acessar uma base de dados ou criar uma nova base, quando essa não exista. Para que a base seja criada com o comando use, é necessário utilizar o comando INSERT, que será abordado mais abaixo. Importante lembrar que quando utilizamos o USE para criação, a base só será de fato criada quando criarmos registros dentro desta base de dados. Toda vez que uma base de dados é acessada, teremos o seguinte resultado:

    8.png

    Comando “INSERT”:

    Definição: Utilizado para inserir registros dentro de coleções (tabelas). Para inserir dados, devemos utilizar o padrão de escrita JSON, conforme imagem abaixo:

    9.png

    Sintaxe do comando INSERT:

    10.png

    Vamos praticar um pouco o comando, criando uma coleção dentro de uma base de dados que iremos criar também. Para criar a base, basta também utilizar o comando “use” visto um pouco mais acima.
    Ficará mais ou menos assim:

    11.png

    Olhando para a figura acima, conectamos no mongo, através do comando “mongo” e com o comando “use + TreinamentoMongo” criamos uma base de dados com esse nome. Um detalhe que deve ser levado em consideração é que a base só é de fato criada quando dentro dela eu faço algum tipo de inserção, como no comando insert logo abaixo, que ficou dessa maneira: db.Comandos.insert({NomeComando: “Insert”, Definicao: “Inserir registros e campos”}) e traduzindo, estamos criando uma coleção chamada Comandos e inserindo os campos “NomeComando” e “Definição” com os registros “Insert” e “Inserir registros e campos”.

    PS: Toda vez que você definir o registro entre “” (aspas duplas), o mongo subentende que se trata de um campo que receberá valor do tipo string.

    Para certificar que a coleção foi criada, basta utilizar o comando SHOW + collections, conforme abaixo:

    12.png

    Comando FIND:

    Definição: Comando utilizado para realizar buscar de diversas formas em nossa base de dados, utilizando o modelo de armazenamento de dados JSON.

    Sintaxe do comando FIND:

    13.png

    Exemplo de consulta (find) simples: db.Consultas.find();

    Quando não definimos parâmetros na minha busca dentro do JSON** “()”**, o find retorna todos os campos que estão dentro dessa coleção conforme imagem abaixo:

    15.png

    Exemplo de consulta (find) por campo específico. Nesse exemplo vamos fazer um find pelo campo TipoConsulta: db.Consultas.find({TipoConsulta: “Media”});

    16.png

    Exemplo de consulta (find) por campo utilizando Operadores lógicos. Os operadores lógicos são:

    $lt (menor que)
    $lte (menor ou igual a)
    $gt (maior que)
    $gte (maior ou igual a)
    $all (corresponder a todos os valores em um array)
    $exists (verificar se um campo existe ounão)
    $mod (módulo)
    $ne (não igual)
    $in (corresponder a um ou mais valores em um array)
    $nin (corresponder a valores zero em um array)
    $or (corresponder uma consulta a outra)
    $nor (não corresponder uma consulta nem outra)
    $size (corresponder qualquer array com número definido de elementos)
    $type (corresponder valores com tipo de dados BSON especificado)
    $not (não igual a)
    

    A consulta será por Nível maior ou igual a dois: db.Consultas_Com_Operador_Logico.find({Nivel: {$gte: 2}})

    17.png

    Exemplo de consulta identada, utilizada para melhor visualização, com o comando “pretty”: db.Consultas_Com_Operador_Logico.find({Nivel: {$gte: 2}})

    18.png

    PS: Reparem que aos poucos vamos utilizando diversos modos de pesquisar minhas coleções. No exemplo acima eu fiz uma consulta por Níveis maiores ou iguais a 3. O segredo do mongo está na forma que desenhamos” o JSON.

    Exemplo de consulta identada, com parâmetro maior ou igual com campo TipoConsulta em ordem crescente: db.Consultas_Com_Operador_Logico.find({Nivel: {$gte: 1}}).sort({TipoConsulta: 1}).pretty();

    19.png

    PS: O comando “sort” tem como parâmetro 1 (crescente) e -1 (decrescente). E mais uma vez observamos que o segredo está na forma em que montamos o JSON.

    Comando REMOVE

    Definição: Comando utilizado para remover de uma collection um registro. Assim como todos os comandos, utiliza-se o padrão JSON para escrita da querie.

    Sintaxe do comando REMOVE:

    21.png

    Exemplo de remoção de registro utilizando operadores lógicos. Nesse exemplo, estamos removendo todos os registros que contenham Níveis maiores ou iguais a 2.:

    22.png

    **Dica: Para trabalhar com remove, é necessário que haja uma precisão nas informações, pois não há volta de um remove, pois o “enter” acaba sendo o “commit”. Então sugiro que antes de se aventurar por remove e outros comandos como update(esse que será abordado em uma outra oportunidade) faça um backup (backup nunca é demais).
    **

    Pessoal, lembrem-se sempre que a área de QA não está apenas em automação e escrita de scripts, explorar outras frentes é sempre legal =) … Buscar conhecimento em banco de dados é uma arte que vale muito a pena e acaba se tornando muito divertido!!!

    Ser o melhor no que faz é o QA =)

    Até o próximo!!!