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!!!