Tá acabando!

Compre agora com desconto
Corra enquanto há tempo!

dias

:

horas

:

minutos

:

segundos

Primeiras aulas do curso MongoDB: Uma alternativa aos bancos relacionais tradicionais

MongoDB: Uma alternativa aos bancos relacionais tradicionais

Criando e inserindo em uma coleção - Introdução

Boas-vindas ao curso de MongoDB. Esse curso foi criado pelo Felipe Oliveira e está sendo dado por mim, Guilherme Silveira. Nesse curso nós vamos ver desde a instalação do MongoDB até a criação de uma primeira coleção de dados de diversos alunos de uma escola.

Vamos ver como manipular esses dados, seja inserindo, removendo, alterando e atualizando por completo, por partes. Vamos ver como os operadores do MongoDB se aplicam em diversas dessas fases, seja na pesquisa ou seja na alteração dos dados.

Vamos ver que nós acabamos pensando de uma maneira diferente quando pensamos que a pesquisa e a alteração de um dado do MongoDB, armazenado no MongoDB, é uma série de invocações de regras que aplicamos, de operadores que aplicamos aos nossos dados. Além disso, vamos ver um dos usos que aparece bastante no MongoDB, que é a busca por proximidade.

Por exemplo: eu tenho diversos alunos de uma faculdade e para este aluno, a Mariana, eu queria saber quem são as pessoas mais próximas dela, para que ela possa fazer um trabalho em grupo, para que ela possa vir de carro com todo mundo junto e para que ela possa fazer alguma coisa. Onde você vê busca por proximidade no dia a dia? Em diversos lugares.

Quando você quer procurar por um restaurante perto de onde você está, quando você quer procurar uma empresa próximo de onde você está ou quando você quer procurar coisas próximas às outras coisas. Então nós acabamos usando bastante a busca de proximidade no planeta Terra.

Então nós vamos ver tudo isso, tentando fugir ao mesmo tempo da discussão que não é sadia, de que: "usando o banco ‘A’ ou o banco ‘B’, eu digito menos teclas com meu dedo". Não, a nossa discussão nesse curso não é quem digita menos.

O dia a dia de um programador ou de um desenvolvedor não é de digitação. Não estamos aqui para digitar menos, estamos aqui para entender como a ferramenta pode ser usada, para que ela pode ser usada e quais as vantagens que ela traz no meu dia a dia. É isso que vamos ver nesse curso. Como usar ela no dia a dia, quais as vantagens e desvantagens que ela nos traz e não uma competição de digitação. Se quiser uma competição de digitação, tem o “typeracer.com”.

Então o resultado desse curso é ver diversas “features” do banco, como nós podemos usá-lo e como isso influencia a maneira de nós trabalharmos os nossos dados no banco, para que você possa tomar a decisão se você quer usar ele, se faz sentido usar no seu dia a dia, nesse projeto ou em um outro projeto.

Espero que você aproveite bastante esse curso e possa usar onde fizer sentido, em um ou em outro banco de dados. Bons estudos!

Criando e inserindo em uma coleção - Inicializando o MongoDB

Tudo bem? Vamos então, criar o banco com o MongoDB e trabalhar com ele? O primeiro passo é baixar e instalar. Vou clicar em “Download MongoDB” e escolher o meu sistema operacional, “Windows”. Se você escolher ele, ele tem um instalador, um MSI que é só dar "Next", então instale e já deixe rodando.

No Linux nós temos como descompactar ele com um arquivo compactado, ou dependendo da distribuição, você pode escolher para usar o “apt-get” ou algum outro instalador. O MAC, que é o meu caso, temos que baixar o arquivo para descompactar. Vou clicar para baixar o arquivo. Ele já vai baixar o arquivo para mim. Se você voltar para a página anterior, repare que ele tem até as instruções para instalação, para você seguir passo a passo a instalação, se você quiser.

No nosso caso do MongoDB, nós vamos descompactar o arquivo. Então assim que ele terminar de baixar, aqui está o meu arquivo compactado. Vou descompactar o arquivo. Descompactou e ele criou um diretório, mas esse diretório está dentro do diretório “Transferências”. O que eu vou fazer? Eu vou no meu diretório. Eu tenho aqui nos “Documentos”, “guilherme” e vou criar um diretório novo chamado “cursomongodb”. Adivinha o que eu vou colocar aqui?

Tudo ligado ao curso MongoDB. Dentro desse diretório eu vou querer colocar o nosso MongoDB descompactado. Então aqui está o programa MongoDB. O programa que eu descompactei está aqui dentro.

Repare que ele tem o diretório “bin”, e o diretório “bin” tem tanto o arquivo “mongod” para o servidor, quanto o arquivo “mongo” para o cliente. Vamos rodar o servidor “mongod”? Como fazemos isso? Vamos no terminal. Vou entrar no diretório “Documents/guilherme/cursomongodb” e um monte de coisas. Nossa, está grande o negócio!

“mongodb” e um monte de coisas, “bin”. E aqui dentro vou ter que executar o arquivo “mongodb” e o arquivo “mongo”. Então, primeiro o “mongod” para executar o “mongodb” aqui dentro. “mongod”. Rodo ele e não dá certo. O que ele reclama? Quando nós descompactamos o “mongo”, por padrão no Linux e no Mac, ele fala que ele tenta acessar a “/data/db” e não existe esse diretório.

Inclusive, o diretório “/” é um diretório protegido. Só o super usuário tem acesso. Então eu posso criar esse diretório “/data/db” e dar a permissão de acesso para o usuário. É uma opção. Uma outra opção é executar o “mongod”. Então eu vou executar o “mongod” falando para ele que eu quero colocar os meus bancos de dados, os arquivos do banco de dados em um diretório diferente. Qual diretório que eu vou querer? Deixe-me voltar. Nós estamos em qual diretório mesmo? Não.

No anterior, no diretório do “mongodb”. Vou criar um diretório chamado “db”. É aqui que eu quero colocar, nesse diretório. Eu vou apertar as teclas “Ctrl + C” nisso tudo. Vou voltar para o diretório do meu “mongodb-osx-x86_64-3.2.3/bin”.

E agora sim, “mongod”. Eu vou querer passar um parâmetro para poder executar o “mongod” com um “path” para o banco de dados um pouco diferente, que é o que eu acabei de copiar. Vamos na documentação. Você vai ver que aqui na instalação ele já nos fala isso.

Ele fala: "repare que quando você for executar, ele vai tentar procurar o diretório “/data/db". Se você quiser outro diretório, em vez do “/data/db, você vai passar o parâmetro “--dbpath” do banco de dados. Então é isso o que eu vou fazer. Eu vou colocar num diretório bonito para que nós tenhamos acesso aos arquivos e para que nós possamos ver os arquivos bem facilmente. Então “--dbpath” e o diretório que eu acabei de criar.

Então isso quer dizer que para o meu projeto atual eu estou usando esse diretório. Eu tenho um banco de dados bem isolado para esse meu projeto. Maravilha! Repare que ele até falou: "inicializei o banco de dados dentro desse diretório". Se nós formos lá, podemos ver que o diretório “db” está com o banco de dados criado. Servidor rodando e nós vamos em outra aba. Agora eu quero ver em qual diretório eu estou.

Tenho que entrar no “Documents”, depois “guilherme”, depois “cursomongodb”, depois “mongodb-osx-x86_64-2.3.2/”, depois “bin”, para aí executar o “mongo”. Mas se acalme! Ficar entrando nesse diretório toda vez!? Toda vez entrar nesse diretório não vai rolar! Então, o que eu faço? Volto para o diretório raiz e vou alterar a variável de ambiente “path”. No Windows, alterar a variável de ambiente, no Mac e no Linux eu vou editar, no meu caso com VI, vou editar o arquivo “.bash_profile”.

Nesse arquivo, editou, está em branco, eu não tenho nada no meu arquivo. Vou apertar a tecla “A” para adicionar em conteúdo novo e vou falar que na verdade eu quero exportar o “path” como o “path” atual e o diretório do diretório “bin”.

Qual é o diretório do diretório “bin” mesmo? Eu esqueci! Deixe-me apertar as teclas “Ctrl + C”. Não, eu tenho aqui. Não, não tenho aqui não. Então vou apertar as teclas “Ctrl + C”. Parei o MongoDB. “pwd” para ver o diretório. É isso tudo aqui. teclas “Ctrl + C” nesse aqui e teclas “Ctrl + V” nele.

Posso apertara tecla “Esc” e “:W” para salvar. Tecla “Q” para sair. Então ,“wq” e aperto a tecla “Enter”. Ele salva o meu “.bash_profile”. Salvei o meu arquivo. Vamos voltar para a nossa primeira aba? Naquela ali eu vou deixar rodando o meu banco de dados com aquele “db path” e limpar a tela. Na minha aba nova eu vou querer simplesmente executar “mongo”. Em qualquer diretório, só “mongo” porque ele já pega no meu “path”.

Essa aba do meio, que é lixo, eu vou fechar. Então repare que nós estamos rodando um servidor “mongod”, que é o nosso servidor como SQL, como o Oracle, como o Postgre e como qualquer coisa. Estamos executando o cliente, que é um cliente do SQL, um cliente do Oracle, um cliente do Postgre, um cliente Java para qualquer um desses aqui. Um cliente ruby para qualquer um desses aqui. É um cliente conectado no nosso banco.

Criando e inserindo em uma coleção - Criando coleções e registros

O que nós queremos fazer agora? Nós queremos criar essa nossa coleção de coisas dentro do MongoDB. Nós queremos trabalhar com o MongoDB como um banco de dados. Vamos ver como nós fazemos isso?

O primeiro passo é nós irmos no navegador e olharmos uma tabela. Como nós representamos em um banco de dados relacional um conjunto de alunos? Vamos pensar, por exemplo, em três alunos. Então eu tenho o nome dos três alunos: Felipe, Guilherme e Paulo. Vamos pensar na data de nascimento deles.

Eu tenho a data de nascimento, por exemplo: o Felipe é 26 de fevereiro de 1994. Ele formatou em um formato inglês, mas está tudo certo para mim. O Guilherme é 18 de setembro de 1981, aceito presentes. O Paulo 31 de dezembro de 1979 e estão com as datas de nascimento.

É comum em uma tabela de banco de dados relacional nós termos um campo identificador de cada uma dessas linhas. Esse identificador também é comum que seja sequencial começando no 1. É bem comum. É um padrão.

Então repare que é bem comum nós termos uma tabela chamada “alunos”. Plural por padrão, tudo minúsculo. É um padrão que nós costumamos usar. Os campos “id”, “nome”, “data_nascimento” e cada um deles, cada uma das linhas representa um aluno diferente. Bem comum isso. Representa só um aluno, nada mais.

A normalização dos bancos de dados relacionais faz com que nós representamos o mínimo possível quando seguimos o máximo de regras de deixar o mínimo de código repetitivo, nós representamos o mínimo possível e aqui eu tenho simplesmente um único aluno solto. Maravilha! Mas e no MongoDB? Como nós fazemos isso? Vamos dar uma olhada! Primeiro, como eu criaria essa tabela no SQL. Vamos lá? Eu criaria no SQL assim: “CREATE TABLE” e ele me cria a tabela “alunos”.

Os campos que eu vou ter são os campos “id”, “nome” e “data_nascimento”. O “id” é um “integer” auto incrementável e é a chave primária, a “primary key”. O nome é um campo de texto, “VARCHAR”. Ele é um campo de texto que cabe até 255 caracteres e a data de nascimento é só data, não tem tempo e não tem hora, só “DATE”. Então repare que eu tenho que passar toda a estrutura do meu aluno quando eu crio a tabela no banco de dados relacional. Esse é o padrão do SQL.

Existem extensões que fazem diversas outras coisas. Já o “auto increment”, por exemplo, é uma extensão. Mas o padrão geral nós temos que criar a tabela com a estrutura do que vai ter lá dentro. Se eu quero inserir um aluno, “INSERT INTO alunos” e falo para ele os valores que eu quero inserir.

Por exemplo: para o campo ID “1”, para o nome “Felipe” e para a data de nascimento “19940226”. Seguindo a convenção do SQL. Insiro um aluno novo. Então repare que na hora de inserir, como ele sabe que esse é o ID?

Porque quando eu criei a tabela já tinha uma estrutura. Como ele sabe que esse é o nome? Quando eu criei a tabela já tinha essa estrutura. Como ele sabe que essa daqui é a data de nascimento? Quando eu criei a tabela já tinha a estrutura. Vamos para o MongoDB? No Mongo DB a primeira coisa que eu quero fazer é criar uma coleção de alunos, mas no MongoDB nós não trabalhamos com tabelas, com estruturas fixas.

Então eu simplesmente falo para o banco de dados DB como se eu estivesse escrevendo códigos JavaScript: "banco de dados, eu quero que você crie uma coleção e o nome dessa coleção é ‘alunos’". Qual é a estrutura de cada aluno? Outra história. Ele nos cria a coleção, a coleção de alunos. Então eu tenho uma coleção de alunos. O que eu quero fazer agora? Depois que eu criei, eu quero inserir. Vamos inserir um aluno?

“db.alunos.insert”, dentro da coleção de “alunos”, eu vou querer chamar o “insert” e colocar alguma coisa aí dentro. O que é essa “alguma coisa”? É um objeto de JavaScript. Então vai lembrar bastante a anotação de JSON, apesar de não ser exatamente ela. Então eu tenho entre chaves o que eu vou falar do meu objeto de JavaScript. O campo “nome” é “Felipe” e o campo “data_nascimento” é “19940226”. Repare que eu tive que falar o campo nome e o campo data de nascimento. Por quê?

Porque em nenhum momento eu falei, na estrutura, dos meus alunos. Quando eu criei a coleção, eu não falei estrutura. Então se eu quero agora inserir alguma coisa aí dentro, agora eu tenho que dar uma estrutura para as coisas que eu estou inserindo.

Para cada elemento, para cada documento e para cada coisa que eu insiro aí dentro, eu tenho que dar uma estrutura. A estrutura segue o padrão de um objeto JavaScript que tem uma chave, nome e um valor, “Felipe”.

Uma chave, data de nascimento e um valor “19940226”. “Então, Guilherme, você está falando que isso daí é objeto de JavaScript? Você vai ficar passando string em todo canto?” Se isso é um objeto JavaScript, eu posso criar objetos.

Por exemplo: aqui no JavaScript do MongoDB nós temos o objeto “Date”. Então “new Date(1994,02,26”. Existe esse objeto “Date”, a classe “Date” que eu posso instanciar. E aí, esse é o objeto que eu quero inserir. Vou dar “copy” nesse aqui e vou dar “paste” aqui dentro.

Vou tirar os parênteses para ficar bonito, vou apertar a tecla “Enter” para ficar bonito, vou dar o “paste” para ficar bonito, vou apertar a tecla “Enter” para ficar bonito e fechar os parênteses para ficar lindo. Agora apertei a tecla “Enter” e ele falou: "inseri o aluno para você".

Legal! Ele nos inseriu o aluno. Da mesma maneira que eu inseri um aluno, agora eu quero inserir mais informações. No meu caso, eu quero inserir o curso que esse aluno está matriculado na minha faculdade.

Então, quer dizer que o meu aluno está matriculado em um curso na minha faculdade, qual é o nome desse curso? Lembre-se: nós estamos trabalhando com objetos JavaScript, então aqui eu posso ter a descrição de um curso. Por exemplo: “,” e algum curso.

O curso pode ser um outro objeto. Então o meu curso tem um nome e o nome do curso, por exemplo, do Felipe é Sistemas de Informação. Esse é o curso que o Felipe está fazendo. Então eu posso inserir esse objeto como curso. E muito mais, eu posso ir além.

Eu posso colocar, por exemplo, quais são as notas que o Felipe já tirou nesse curso. Todas as notas que ele já tirou. “,” as notas que ele tirou são: “[10, 9 e 4.5]”. Ele fez três provas e ele já tirou essas três notas. O que mais? Posso colocar mais ainda!

Posso colocar informações sobre o que ele tem de extra. Quais informações extras que ele tem na vida dele e no currículo dele? Então o meu aluno da minha faculdade tem um currículo com várias habilidades. Ele sabe falar inglês e sabe fazer várias coisas.

Então eu quero analisar esses dados para poder disponibilizar isso para possíveis parceiros. Eu vou falar “,” que ele tem habilidades e essas habilidades são diversas, um “array”. Só que dentro desse “array”, cada habilidade, como em um objeto de JavaScript normal, pode ter várias características.

Por exemplo: eu sei que o inglês dele é avançado. Então eu vou armazenar assim: o nome da habilidade é inglês e o nível da habilidade é avançado. Esse é o nome e esse é o nível. Nome é “inglês” e o nível é “avançado”. Legal!

Então eu descrevi o nome e o nível da minha habilidade. Repare que eu não me preocupei com acento que eu tenho na minha chave. E aí, o que eu vou fazer agora? Eu posso ter mais uma habilidade! Por exemplo: ele tem a habilidade “taekwondo” e o nível da habilidade é “básico”. Como qualquer objeto JavaScript, eu posso copiar tudo isso e posso ir no meu banco no MongoDB, “db.alunos.insert” e coloco tudo isso e ele nos insere esse objeto.

Repare que nós fomos capazes de inserir um objeto, um documento que representa o nosso aluno, o curso que ele está fazendo na faculdade e habilidades que ele tem, 1, 2 ou 15 habilidades. A data de nascimento e quais as notas que ele já tirou, tudo isso de uma vez só. Repare que em um único “insert” nós fomos capazes de inserir todos esses valores. Tudo de uma vez só.

Se eu quiser conferir os dois alunos que eu coloquei, eu posso falar para o meu banco de dados: "pegue a minha coleção de alunos, em vez de inserir alguém, procure por ‘find’. Só ‘find’, só procure”. Se eu falar só para procurar, ele nos traz todo mundo e dois objetos, dois alunos. O primeiro que tem um ID e o “nome” é “Felipe” e a data de nascimento, e o segundo que tem um ID e um monte de dados.

Nós vamos inserir mais elementos aqui dentro, nós vamos remover esse aqui que está repetido. Vamos fazer várias pesquisas, aprender a trabalhar com vários tipos de pesquisas aqui dentro e vamos comparar como isso seria feito em um banco de dados relacional tradicional. Tudo isso daqui a pouco!

Sobre o curso MongoDB: Uma alternativa aos bancos relacionais tradicionais

O curso MongoDB: Uma alternativa aos bancos relacionais tradicionais possui 136 minutos de vídeos, em um total de 44 atividades. Gostou? Conheça nossos outros cursos de NoSQL em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda NoSQL acessando integralmente esse e outros cursos, comece hoje!

Plus

Desconto 25%
  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85 R$63,75
à vista R$1.020 R$765
Matricule-se

Pro

Desconto 25%
  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120 R$90
à vista R$1.440 R$1.080
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas