Buscar

Aula-02 - MEAN Stack - parte III - a (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

MEAN Stack 
Parte III – MongoDB 
Revisão 
• MEAN Stack 
– MEAN é usado para denotar uma stack completa para 
desenvolvimento de aplicações incluindo MongoDB, 
Express, Angular e Node.js 
 
 
Revisão 
 
Entendendo o Fluxo de uma Requisição 
• Quando usamos o “npm start” 
Entendendo o Fluxo de uma 
Requisição 
• O arquivo “bin/www” 
 
• Os pontos a serem destacados 
aqui são o porto definido para 
listen e a função createServer 
Revisão 
 
Entendendo o Fluxo de uma Requisição 
• No createServer passamos como argumento o “app.js” 
 
• Ele é o arquivo principal que configura e starta o Express no servidor 
 
• Cada requisição que chega no servidor passa por esse arquivo – o 
“app.js do projeto” 
Revisão 
 
Entendendo o Fluxo de uma Requisição 
• O legal de usar o Express é que ele nos oferece algumas 
facilidades de configuração do servidor 
 
• A variável “app” irá nos oferecer esses recursos 
Revisão 
 
Entendendo o Fluxo de uma Requisição 
• Essa linha é muito importante porque ela encaminha, neste 
caso já que o path é apenas “/”, qualquer requisição para a 
variável “appRouter” que tem as rotas definidas no arquivo 
“app.js” de “routes” 
 
• Resumindo, esse comando encaminha a requisição para 
este arquivo “/routes/app.js” 
Revisão 
 
Entendendo o Fluxo de uma Requisição 
• Neste caso, possui apenas uma rota registrada que lida com o caso “/” ou 
seja, “localhost/” e nada mais. Qualquer outra coisa tipo “/message” não 
será tratado por esta rota 
 
• Essa rota encaminha para “index.hbs” que está no diretório “views” 
Revisão 
 
Trabalhando com Request e Response 
• Aqui usamos o Router do Express 
 
• É onde podemos definir rotas para o servidor usando os métodos do HTTP, tais como 
GET, POST, PUT, DELETE, por exemplo. Neste caso estamos usando o método GET. 
 
Revisão 
 
 
 
 
 
 
 
 
 
Trabalhando com Request e Response 
• Estamos criando uma nova rota, a “/message” e criando uma 
nova view no diretório “views” 
 
Revisão 
 
Trabalhando com Request e Response 
• Podemos usar a “sintaxe do template”para “imprimir/apresentar” alguns dados. 
• De forma geral, podemos imprimir dados com handlebars usando “duplas chaves” – {{}} 
• Entre as chaves podemos usar qualquer variável JavaScript que for passada para a view 
Revisão 
 
• Usamos este “tipo de 
requisição” quando 
queremos “pegar um 
recurso” 
 
• Deve-se usá-lo para 
esse fim 
• Este “tipo de requisição” 
deve ser usado quando 
queremos “enviar algum 
dado para o servidor para 
armazenar lá” 
 
• Se você quer “criar um 
recurso no servidor” 
• Este “tipo de requisição” 
deve ser usado quando 
queremos “mudar 
alguma coisa (algum 
recurso) que já existe no 
servidor” 
 
• Aqui a ideia é “fazer um 
update da parte” e não 
substituir o todo 
 
Tipos de Métodos HTTP 
Revisão 
 
• Usamos este “tipo de 
requisição” quando 
queremos “substituir 
alguma coisa (um 
recurso) que já existe 
no serviro” 
 
• Aqui a ideia é “fazer 
um replace do todo” e 
não apenas mudar 
uma parte 
• Este “tipo de requisição” 
deve ser usado quando 
queremos “apagar algum 
recurso que esteja no 
servidor” 
Tipos de Métodos HTTP 
Revisão 
 
 
 
 
Formato dos Dados - Request e Response 
• Com um “post request”, por exemplo, nós 
podemos armazenar dados no “body”, que 
também é parte da “request”. 
 
Formato dos Dados - Request e Response 
• Também podemos pegar “as coisas” que 
estamos vendo na URL, por meio do “Request 
Params” e do “Request Query” . 
 
• O “Request Params” são codificados em um lugar 
específico na URL pois é “hard-encoded” com o “ 
: ” na URL na implementação 
 
• O “Request Query” por sua vez aparece após o “ 
? “ 
• Tem a estrutura sintática “chave = valor” 
MongoDB 
• Blz... Agora vamos... 
– Vamos “brincar” um pouco com o MongoDB.. 
 
– Uma vez que é uma escolha bastante utilizada no 
mercado para aplicações com Angular e Node.js/Express 
 
– É importante ressaltar que qualquer outro banco pode 
ser utilizado 
 
– Pra começar.. Um pensamento.. 
 
 
 
 
MongoDB 
• Uma dúvida comum em relação ao MongoDB é 
sobre a modelagem e relacionamento. 
– MongoDB é considerado um banco de dados não 
relacional, 
• Não é necessário fazer uma espécie de “CREATE TABLE” para 
começar inserir dados. 
– E quanto relacionar um registro com outro? 
• Bom, para isso é necessário pensar de forma não relacional 
 
• Vamos conversar sobre isso.. Mas antes… 
Preparando o Projeto 
• O que precisamos fazer: 
 
 
 
 
 
 
 
 
• Vamos por partes... 
 
• Precisamos instalar na nossa 
máquina 
 
• Para isso devemos 
• Fazer o download em 
https://www.mongodb.
com/ 
• Extrair ele e mover o 
diretório 
• Ou usar o installer 
• Depois nós 
precisamos “levantar” 
o banco (MongoDB 
Server) a fim de 
executar operações no 
nele 
• E finalmente precisamos ter 
um “cliente” para interagir 
com o banco 
 
• No cliente é que iremos “dar 
o comados” tipo “salvar 
algo.”, “pegar algo” 
 
• Apesar de termos um 
cliente simples instalado 
junto com o MongoDB, o 
que vamos normalmente 
fazer é usar a nossa 
aplicação em Node.js para 
interagir com ele 
https://www.mongodb.com/
https://www.mongodb.com/
https://www.mongodb.com/
Preparando o Projeto 
• O que precisamos fazer inicialmente: 
– É preciso instalar o MongoDB (https://www.mongodb.com) 
 
 
 
 
https://www.mongodb.com/
https://www.mongodb.com/
https://www.mongodb.com/
Preparando o Projeto 
• O que precisamos fazer inicialmente: 
– É preciso criar o diretório de dados do banco 
• É aonde nossos dados irão ser armazenados 
 
– Por padrão é o “\data\db” do driver aonde o banco foi 
instalado. 
 
– Mas vamos criar ele dentro do nosso projeto 
 
 
Etapa muito 
importante 
Preparando o Projeto 
• O que precisamos fazer inicialmente 
– Vamos iniciar o banco com o comando “mongod”... 
 
• IMPORTANTE: 
– Como não estamos usando o path padrão, precisamos 
especificar o path alternativo dos arquivos de dados 
passando a opção “--dbpath” para o executável. 
 
 
 
 
 
– Também dá para fazer isso em um arquivo de 
configuração 
 
 
Preparando o Projeto 
• O que precisamos fazer inicialmente: 
– Antes de conectar o Node.js nele, vamos fazer alguns 
testes para ver se está tudo ok.. 
 
– Com o “banco levantado” (executando) nós podemos 
trabalhar nele usando o “MongoDB Shell Client” 
 
– Vamos nos conectar no banco com o comando “mongo” 
 
 
 
 “mongod” => Server 
 “mongo” => Client 
 
 
 
 
Databases, Collections e Document 
• Uma vez Ok.. Precisamos entender o seguinte conceito: 
– MongoDB não tem tabelas. O banco possui “collections of 
documents” (coleções de documentos) 
• As coleções são análogas a tabelas em bancos de dados relacionais 
e os documentos aos dados. 
 
 
 
 
 
 
– Para selecionar uma base de dados a ser usado, use a 
instrução “use <my_db>” no Shell Client 
 
 
 
Coleção 
Coleção 
Coleção 
Documento 
Databases, Collections e Document 
• Criando um Database e Collections 
– Se um banco de dados não existir, o MongoDB cria o 
banco de dados quando se armazena os dados para ele 
pela primeira vez. (ou seja, quando se cria um coleção 
com seu documento) 
 
– Podemos mudar para um banco de dados inexistente e 
executar a seguinte operação 
 use myBDuser 
Banco 
“myDBuser” 
Coleção 
“users” 
Documento (dados) 
Databases, Collections e Document 
• Criando um Database e Collections (Operação de Escrita) 
 
 
Databases, Collections e Document 
• Inserindo Um ou Vários Documents (Operação de Escrita) 
– Posso inserir um novo documento, por exemplo, em 
uma coleção já existente 
 
 
 
 
 
Databases, Collections e Document 
• Inserindo Um ou Vários Documents (Operação de Escrita) 
– Ou posso inserir vários documentos ao mesmo tempo 
• Neste exemplo, estou criando também um novo collection 
 
 
 
 
Databases, Collections e Document 
• Operação de Leitura 
– As operaçõesde leitura recuperam documentos de uma 
coleção 
• ou seja, consulta uma coleção para “pegar” os documentos. 
 
 
 
 
 
Banco 
“myDBuser” 
Coleção 
“users” 
Apresenta o “name” e o 
“address” como resultado da 
consulta 
Seleciona o campo “age” cujo 
valor seja maior ou igual 18 
(Comparison Query Operators) 
Databases, Collections e Document 
• Operação de Leitura 
 
 
Databases, Collections e Document 
• Operação de Leitura 
 
 
https://docs.mongodb.com/manual/reference/opera
tor/query/#query-selectors (Query Operators) 
https://docs.mongodb.com/manual/reference/operator/query/#query-selectors
https://docs.mongodb.com/manual/reference/operator/query/#query-selectors
https://docs.mongodb.com/manual/reference/operator/query/#query-selectors
https://docs.mongodb.com/manual/reference/operator/query/#query-selectors
Databases, Collections e Document 
• Operação de Leitura 
 
 
Databases, Collections e Document 
• Operação de Leitura 
 
 
Dica 
Databases, Collections e Document 
• Operação de Leitura - Arrays 
– Consulta todos os documentos onde “tags” é um array 
que contém a string "red" como um dos seus elementos: 
 
 
 
 
– Consulta todos os documentos onde o array “dim_cm” 
contém pelo menos um elemento cujo valor seja 
superior a 25 
 
Databases, Collections e Document 
• Operação de Leitura - Arrays 
 
Databases, Collections e Document 
• Operação de Update 
– As operações de atualização modificam os documentos 
existentes em uma coleção . 
• No MongoDB, as operações de update visam uma única coleção. 
• Todas as operações de escrita no MongoDB são atômicas no nível de um 
único documento. 
 
 
 
 
 
Coleção 
“users” 
Determina o critério de busca do 
elemento a ser atualizado. Neste 
caso, “age” menor que “18” 
Seleciona o campo “status” 
cujo valor será atualizado 
Banco 
“myDBuser” 
Databases, Collections e Document 
• Operação de Update 
 
 
Databases, Collections e Document 
• Operação de Delete 
– As operações de delete remove documentos de uma 
coleção. 
• No MongoDB, as operações de delete visam uma única coleção. 
• Todas as operações de escrita no MongoDB são atômicas no nível de um 
único documento. 
 
 
 
 
 
Banco 
“myDBuser” 
Coleção 
“users” 
Determina o critério de deleção 
Neste caso, “status” igual a 
“reject” 
Databases, Collections e Document 
• Operação de Delete 
 
 
s 
 
Databases, Collections e Document 
 
Databases, Collections e Document 
• s 
Databases, Collections e Document 
 
Databases, Collections e Document 
Databases, Collections e Document 
• Vamos supor agora o seguinte exemplo: 
– Uma aplicação de Escola, com uma coleção de alunos e 
uma coleção de biblioteca, sendo que essa aplicação 
deve fazer o controle de aluguel dos livros aos seus 
alunos 
 
– Pensando de forma relacional teríamos pelo menos três 
tabelas: alunos, livros e aluguel, 
• onde a tabela de aluguel possui 
– o id do aluno que retirou, 
– o id do livro retirado 
– e outros campos complementares. E no MongoDB? 
Databases, Collections e Document 
• Seja a coleção de alunos: 
“tabela” alunos 
(coleção) 
Databases, Collections e Document 
• Seja a coleção de livros: 
“tabela” livros 
(coleção) 
“tabela” aluguel 
tem que ser 
pensada de 
 forma um 
pouco diferente 
(agrupamento) 
Databases, Collections e Document 
• Controlando empréstimo de livros 
– O objetivo é : Como fazer no MongoDB o controle de 
alugueis (empréstimos) de livros para os alunos? 
 
– Uma abordagem para a modelagem seria pensar a 
melhor maneira de extrair a maior quantidade de 
informações em um único find(). 
 
– Como o objeto de interesse é controle de livros, então a 
coleção de livros é que será modificada para agregar as 
funções de alugueis, 
Databases, Collections e Document 
• Controlando empréstimo de livros 
– Vamos supor o seguinte cenário: 
• A aluna Carolina Alves retirou o livro O Príncipe por 5 dias. 
 
– Para fazer esse controle, vamos adicionar à coleção 
“livros” uma chave chamada “aluguel”, composta de 
múltiplos valores. 
 
– Desta forma, todos os livros alugados terão a 
chave aluguel 
• Que é composta de valores que podem ser adicionados de 
acordo com cada necessidade. 
 
Databases, Collections e Document 
• Controlando empréstimo de livros 
 
• Adicionar à coleção 
“livros” uma chave 
chamada “aluguel” 
 
• Desta forma, todos os 
livros alugados terão a 
chave aluguel 
Databases, Collections e Document 
• Controlando empréstimo de livros 
– Dessa forma a consulta por todos os livros alugados 
seria: 
 
 
 
 
– E os livros disponíveis na biblioteca (não alugados) seria: 
Databases, Collections e Document 
• Controlando empréstimo de livros 
– Seguindo essa lógica, assim que a aluna devolver o livro, 
basta remover a chave “aluguel” da coleção livro 
• Que o mesmo volta a ficar como disponível na biblioteca. 
 
– Também o conteúdo da chave aluguel pode ser movida 
para outra chave como por exemplo, historicoalugueis, 
• Dessa maneira mantém um histórico de quem foram os alunos 
que fizeram retiradas, 
• Assim também gerar estatísticas de tempo médio de retirada, 
quais foram os livros mais retirados, quem pagou multa, quais 
alunos mais retiram livros, etc. 
Databases, Collections e Document 
• Outras perguntas 
– Qual o livro que o usuário “carolina.alves” alugou? 
 
 
– Qual a data de entrega do livro “O Principe” alugado 
pelo usuário “carolina.alves”. 
Databases, Collections e Document 
• Obter todas as informações do aluno que está com o livro 
“O Principe” 
– Pela lógica eu preciso fazer um find() em livros, pegar o ID do 
aluno, e outro find() em alunos. 
 
 
 
• Para entender melhor… 
– O método find() retorna um “cursor” para os resultados. 
– É preciso usar o método “next()” para acessar o documento. 
– Execute os comando abaixo no shell…. 
Para se aprofundar bastante no assunto 
• Official MongoDB Page: 
– https://www.mongodb.com/ 
 
• Setup Instructions on Official Page (choose your 
OS): 
– https://docs.mongodb.com/manual/administration/inst
all-community/ 
Atividades 
• Para fechar 
– Insira novos alugueis para cada aluno da base de dados 
 
Atividades 
• Para fechar 
– Faça novas consultar para recuperar os novos dados 
cadastrados 
 
– Atualize o NOME de um usuário 
 
– Atualize o TITULO de um livro 
 
– Apague um ALUGUEL realizado 
 
 
 
Atividades 
• Para fechar 
– Atualize um documets para que permita que um livro 
tenha um “array de alugueis” 
• A ideia seria indicar que o livro tem vários empréstimos ao 
mesmo tempo, simulando que mais de um na escola 
 
 
 
Anexo 
MongoDB e Join - $lookup 
• É muito comum dúvida sobre joins — como fazer 
“relacionamento” em bancos não relacionais — e 
juntar informações de duas coleções diferentes. 
 
• Pode-se usar o operador de agregação $lookup que 
nada mais é do que o left join do SQL. 
 
• Esse operador realiza a busca em duas coleções 
diferentes e agrega os documentos que possuem o 
mesmo identificador 
MongoDB e Join - $lookup 
• Preparando o cenário: Levantando o banco 
MongoDB e Join - $lookup 
• Preparando o cenário : Populando duas coleções -> 
produtos e pedidos. 
“id” entre as coleções 
MongoDB e Join - $lookup 
• Preparando o cenário : Usando $lookup, a query de 
agregação fica... 
 
 
 
 
 
 
– A agregação é realizada na coleção de pedidos 
– from: indica em qual coleção a busca deve ser realizada 
– localField: indica qual é a chave de busca local 
– foreignField: indica qual a chave que deverá ser encontrada 
– as: indica um nome para o subdocumento que receberá esse 
cruzamento 
MongoDB e Join - $lookup 
• Preparando o cenário : Usando $lookup, a query de 
agregação fica... 
 
 
 
 
 
 
MongoDB e Join - $lookup 
• Extra....

Mais conteúdos dessa disciplina