Meu nome é Beatriz, atuo como pessoa desenvolvedora back-end na Creditas e curso ADS no Senac, sou ex-aluna da reprograma . Em 2019 tive que não só iniciar uma transicão de carreira, mas de genero também, então tive que aprender muita coisa até chorar,e durante esse processo eu aprendi muito me conheci melhor. Gosto de passar meu tempo livre jogando ou vendo um pirata que estica, eu tive um contato muito cedo com a programação e amo por paixão o meu JS.
- Bebam água meninas
- Sinta-se a vontade para fazer perguntas, pode perguntar pelo chat também ou perguntar as monitoras
- Qualquer pergunta é válida.
- Pode deixar a camera aberta para a prof não se sentir sozinha
- Introdução ao Banco de Dados
- SQL vs NoSQL
- Introdução ao MongoDB
- Introdução ao Mongoose
- Projeto Prático
Banco de dados é a organização e a armazenagem de informações sobre determinada aplicação.
Pensando em back-end, ele é fundamental para o funcionamento adquado de nossas aplicações, pois precisamos salvar dados dos nossos clientes.
- Salvar dados da aplicação
- Deixa a aplicação escalavel
- Desempenho
- Segurança
- Confiabilidade
SQL | NOSQL |
---|---|
Os bancos de dados SQL, também conhecidos como bancos de dados relacionais, foram projetados para armazenar dados que possuem um esquema estruturado, surgiu devido a necessidade de um sistema mais barato e eficiente para armazenar dados. | Surgiu como alternativa aos bancos relacionais, o MongoDB uns do mais conhecido, foi lançado aproximadamente em 2009. |
Bancos de dados relacionais são compostos por tabelas que possuem relacionamento entre si, essas tabelas possui colunas(columns) e linhas(rows), que são a forma que os dados são organizados | Banco de dados não relacionais são compostos por dados não estruturados, no MongoDB por exemplo, possuímos Collections que são coleção de documentos e os documentos são armazenados são os documentos em formato JSON, possuindo uma chave e valor. |
O cenário para o uso do SQL e quando necessitamos de dados precisamente estruturados com relação entre si | Um cenario ideal para uso do NOSQL quando uma BigData por exemplo, que precisamos que a aplicacao tenha um bom desepenho e escale horizontalmente |
O MongoDB é um banco de dados direcionado a Documentos e de código aberto, sendo multiplataforma. Foi escrito na linguagem C++ e é classificado como um programa de banco de dados NoSQL, o MongoDB usa documentos semelhantes a JSON para o registro dos dados.
// Document - Pessoa
{
nome: String,
idade: Number,
profissao: Array
rg: Object
}
A database é a camada superior que tem como finalidade separar as informações por collections.
A Collection é aonde ficam armazenados os documentos, similar a um array. Fazendo um comparativo ao SQL, ela seria proximo a uma Tabela, no entanto, ela não possui as limitações da mesma.
[
{
nome: "Beatriz",
idade: 24,
profissao: ["Desenvolvedora Back-end", "Professora"]
},
{
nome: "",
idade: 0,
profissao: [],
formação: "",
altura: ""
}
]
A estrutura do documento é muito similar a um objeto javascript, possuindo chave-valor.
// document
{
nome: "Beatriz",
idade: 24,
profissao: ["Desenvolvedora Back-end", "Professora"]
}
Relação de metodos com o CRUD
OPERAÇÃO | MONGODB | DESCRIÇÃO |
---|---|---|
CREATE | db.insertOne() | cria um documento |
READ | db.find() | ler um documento |
UPDATE | db.updateOne() | atualiza um documento |
DELETE | db.deleteOne() | deleta um documento |
Mongo Atlas é um banco de dados em Cloud, atualmente é o lider de banco de dados, devido sobretudo a sua facilidade de uso, desempenho e escalabilidade.
Seu banco fica armazenado em Cluster que é um espaço numa VM que o seu banco de dados fica hospedado.
Como criar um Cluster documentação
MongoDB Compass é uma interface gráfica poderosa para consultar, agregar e analisar seus dados MongoDB em um ambiente visual.
É possivel analisar as base de dados já existente bem como inserir ou exportar dados, em formato JSON ou CSV
Mongoose ORM/ODM é uma ferramenta de modelagem de dados para Mongo, ele permite facilitar a armazenagem e modelamento de dados, bem como facilita a busca de documentos e a segurança do banco.
Termos/Conceitos
ORM
Mapeamento objeto-relacional é uma técnica de desenvolvimento utilizada para fazer umarelação dos objetos
com os dados que eles representam.ODM
Object Data Model , modela os dados baseado em Orientação a ObjetoOOP
uri
é uma parte da URL, ela pode ser um trecho específico relacionado a configuração de um banco de dados por exemplo.
Abaixo um exemplo em javascript
const MONGO_URI = "mongodb://localhost:27017/reprogramaMusic"
const connect = async () => {
try {
await mongoose.connect(MONGO_URI, {
{
useNewUrlParser: true,
useUnifiedTopology: true,
}
)
console.log('Banco de dados conectado')
} catch (error) {
console.error(error)
}
}
module.exports = { connect }
const db = require('dbconfig.js')
db.connect()
Schema ou model é o nosso modelo de dados, assim podemos mapear o nossa model, exemplo: uma Pessoa, ela possui um nome, sobrenome, uma data de nascimento...
Quando criamos a nossa Schema, precisamos definir a tipagem da propriedade bem como as regras, existe cenarios que o campo é requirido, que o campo é unico e sucessivamente.
Tipo | Definição | Exemplo de uso |
---|---|---|
String | texto | para nomes, email, senhas... |
Number | numero | para idades, likes, contadores... |
Date | data | data de criação, data de modificação... |
Array | array que seria equivalente a lista | lista de objetos, como por exemplo: Filmes, Profissão, Comentários, etc |
... e outros tipos do Javascript
Exemplo de uso em javascript
const Schema = new mongoose.Schema({
artista: {
type: String,
required: true,
},
titulo: {
type: String,
required: true,
},
album: {
type: String,
required: true,
},
ano: {
type: Number,
required: true,
},
})
module.exports = mongoose.model('musica', Schema)
vamos conhecer o basico do mongoose
Ao utilizar esse metodo retornamos todos as musicas da collection
const musica = await Musica.find()
Caso queira filtrar algum dado da collection, basta passar um objeto como parametro para o metodo find
const musica = await Musica.find({
artista: req.query.artista,
titulo: req.query.titulo,
album: req.query.album,
ano: req.query.ano,
})
const musica = await Musica.findById(req.params.id)
const musica = Musica.create({
artista: req.body.artista,
titulo: req.body.titulo,
album: req.body.album,
ano: req.body.ano,
})
await musica.save()
const musica = await musica.delete()
Resumo dos métodos vistos até aqui.
OPERAÇÃO | MONGODB | MONGOOSE |
---|---|---|
CREATE | db.insertOne() | musica.save() |
READ | db.find() | musica.find() |
UPDATE | db.updateOne() | musica.save() |
DELETE | db.deleteOne() | musica.delete() |
Variaveis de ambiente permite que a desenvolvedora tenha maior controle e segurança sobre a aplicação, permite por exemplo salvar uma senha do banco de dados. Para essa nosssa API, utilizaremos o dontenv-safe, que adiciona uma camada adicional de segurança para o desenvolvedor.
Para instalar o dotenv-safe, basta utilizar o comando:
npm install dotenv-safe
Para habilitar as variaves de ambiente.
require('dotenv-safe').config()
// para utiliza-la
const MONGO_URI = process.env.MONGO_URI
const PORT = process.env.PORT
No arquivo .env salvamos as variaveis de ambiente.
PORT=3000
MONGODB_URI=mongodb://localhost:27017/pokemon
No arquivo .env.example
salvamos somente a variavel vazia para que o proximo desenvolvedor que baixar o projeto, saber que precisa definir essas variaveis.
MONGODB_URI
PORT
ReprogramaMusic
├─ src
│ ├─ controllers
│ │ └─ musicController.js
│ ├─ database
│ │ └─ mongoConfig.js
│ ├─ models
│ │ └─ musicSchema.js
│ ├─ routes
│ │ └─ musicRouter.js
│ └─ app.js
├─ package-lock.json
├─ package.json
├─ .gitignore
├─ README.md
└─ server.js
Dependencia | Descrição |
---|---|
Express | Framework para construção de micro-serviços com Node |
Cors | Expoe nossa api a outros dominios |
Mongoose | Uma lib ORM/ODM que facilita a criação de modelos de dados para o MongoDB. |
dotenv-safe | Garante que todas as variáveis de ambiente necessárias sejam definidas após a leitura |
nodemon | Recarrega nossa API, cada vez que fazemos uma alteração no código |
- [GET] /musicas
- [POST] /musicas/create
- [PUT] /musicas/:id
- [DELETE] /musicas/:id
- [GET] /musicas/:id
- https://www.gartner.com/en/information-technology/glossary/object-data-model
- https://medium.com/tkssharma/node-js-with-mongoose-odm-9697c09665df
- https://developer.mozilla.org/pt-BR/docs/Learn/Server-side/Express_Nodejs/mongoose
- https://docs.mongodb.com/
- https://docs.mongodb.com/manual/crud/
- https://docs.atlas.mongodb.com/tutorial/create-new-cluster/
- https://studio3t.com/academy/topic/mongodb-vs-sql-concepts/
- https://dzone.com/articles/sql-vs-nosql
- https://mongoosejs.com/docs/index.html
vamos fazer um API dos cantores das musicas?
O entregável obrigatório consiste em um getAll, getById e um Post. Caso queira e se sinta confortável pode fazer um CRUD completo.
[GET] "artistas/all" - retorna todos os autores de
[GET] "artistas/{id}" - retorna um unico autor por id
[POST] "artistas/create" - cria um novo autor
{
artista : string,
likes: number,
deslikes: number,
musicas: array, // ["musica1", "musica2", ...]
}
Qualquer dúvida pode entrar em contato.
Instagram - @isjanebia
Linkedin - Beatriz Ramerindo
Telegran - @littlejanne