Não seja um mongo com MongoDB | Agile Testers
Não seja um mongo com MongoDB
Topic created · 1 Posts · 12165 Visualizações
thiagompereira MVP última edição por Leonardo Galani
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:
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:
Criar a pasta "data" com o comando "md data";
Entrar na pasta data e criar a pasta "db" com o comando "md db";
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:**
Para saber se o mongo subiu, o comando mongo deixará a tela assim:
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:
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:
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:
Sintaxe do comando INSERT:
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.
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:
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:
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:
Exemplo de consulta (find) por campo específico. Nesse exemplo vamos fazer um find pelo campo TipoConsulta: db.Consultas.find({TipoConsulta: "Media"});
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}})
Exemplo de consulta identada, utilizada para melhor visualização, com o comando "pretty": db.Consultas_Com_Operador_Logico.find({Nivel: {$gte: 2}})
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();
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.
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:
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.:
**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!!!