MongoDB,
uma introdução
Live de Python #174
Roteiro
1. SQL e Documentos? 3. MongoDB
Estruturado ou não estruturado? Orientado a documentos
2. Bancos de Documentos 4. Mão na massa
Uma visão geral sobre Viemos aqui pra isso, não é mesmo?
semi-estruturados
picpay.me/dunossauro apoia.se/livedepython PIX
Ajude o projeto
Ademar Peixoto, Alex Lima, Alex Lopes, Alexandre Harano, Alexandre Santos, Alexandre Tsuno, Alexandre
Villares, Alynne Ferreira, Alysson Oliveira, Amaziles Carvalho, André Rocha, Arnaldo Turque, Artur Zalewska, Bruno
Batista, Bruno Oliveira, Caio Nascimento, Carlos Chiarelli, Cleber Santos, César Almeida, Davi Ramos, David
Kwast, Diego Guimarães, Diego Ubirajara, Dilenon Delfino, Donivaldo Sarzi, Elias Soares, Eric Niens, Eugenio
Mazzini, Everton Alves, Fabiano Gomes, Fabio Barros, Fabio Castro, Fabrícia Diniz, Flavkaze Flavkaze, Francisco
Alencar, Franklin Silva, Fábio Serrão, Gabriel Simonetto, Gabriel Soares, Gabriela Santiago, Geandreson Costa,
Guilherme Castro, Guilherme Felitti, Guilherme Ostrock, Henrique Machado, Israel Fabiano, Italo Silva, Johnny
Tardin, Jonatas Leon, Jonatas Oliveira, Jorge Plautz, Jose Mazolini, José Prado, João Lugão, João Schiavon,
Juan Gutierrez, Jônatas Silva, Júlia Kastrup, Kaio Peixoto, Kaneson Alves, Leonardo Cruz, Leonardo Galani,
Leonardo Mello, Lidiane Monteiro, Lorena Ribeiro, Lucas Barros, Lucas Mello, Lucas Mendes, Lucas Teixeira,
Lucas Valino, Luciano Ratamero, Maiquel Leonel, Marcela Campos, Marcelo Rodrigues, Maria Clara, Marina
Passos, Matheus Vian, Natan Cervinski, Nicolas Teodosio, Osvaldo Neto, Patric Lacouth, Patricia Minamizawa,
Patrick Gomes, Paulo Tadei, Pedro Pereira, Peterson Santos, Rafael Lino, Reinaldo Silva, Renan Moura, Revton
Silva, Rodrigo Ferreira, Rodrigo Mende, Rodrigo Vaccari, Ronaldo Silva, Sandro Mio, Silvio Xm, Thiago Araujo,
Thiago Borges, Thiago Bueno, Tyrone Damasceno, Vinícius Bastos, Vítor Gomes, Wendel Rios, Wesley Mendes,
Willian Lopes, Willian Rosa, Wilson Duarte, Yury Barros, Érico Andrei
Obrigado você
https://pt.wikipedia.org/wiki/Nota_fiscal_eletr%C3%B4nica
SQL
vs Como pensamos
em bancos de
Doc dados?
Como pensamos em bancos de dados?
Geralmente, quando pensamos em bancos de dados, pensamos em
estruturas como tabelas:
Nome Email Telefone
Existe algum problema em pensar assim?
Literalmente, NÃO. Porém, esse modelo, em alguns momentos, não
representa os dados como gostaríamos ou não oferece a flexibilidade
necessária.
Um problema comum!
Se em um determinado dia, tivermos que armazenar dois telefones, como
faríamos?
Nome Email Telefone
Um problema comum!
Se em um determinado dia, tivermos que armazenar dois telefones, como
faríamos?
Nome Email Telefone Telefone 2
Um problema comum!
Uma solução tradicional
ID UID Telefone Telefone 2
1 1 99999999999 NULL
2 1 99888888888 99777777777
ID Nome Email
1 Eduardo [email protected]
2 Fausto [email protected]
ID Nome Email
Um problema comum! 1 Eduardo [email protected]
2 Fausto [email protected]
ID UID Rua Número CEP
1 1 Avenida .. 42 33333333 ID UID Telefone Telefone 2
2 2 Rua ... 982 22222222 1 1 99999999999 NULL
2 2 99888888888 99777777777
ID UID Cargo Departamento
1 1 1 1
ID Cargo
2 2 2 5
1 QA
2 Dev
O que nós queríamos
representar mesmo?
Uma pessoa que usa o sistema!
A complexidade para construir
Em um mundo baseado em web,
onde esses dados vão ser
requeridos via API, essa é a
complexidade média de uma
requisição.
O retorno que gostaríamos
Quando no final a representação
esperada para transicionar na web é
um JSON ou um *DOCUMENTO*
Banco de
Docu Uma visão geral
sobre dados
mentos semi-estruturados
Orientado a documentos
Normalmente pensamos em tabelas e esquemas de banco.
Tabelas são "inflexíveis", pois a estrutura tem que ser sempre mantidas, o
que mantém uma "estrutura" padrão.
A ideia dos documentos é ser mais flexível.
Dados semi-estruturados
Identificador
Nome Telefone Endereço
Eduardo Residencial Comercial Rua CEP
99999999999 99888888888 …. 13333333
Tipos semiestruturados
● Json
● Bson
● XML
● YAML
● ...
Json
JavaScript Object Notation é talvez a forma mais popular que temos como
exemplos de dados semiestruturados.
{
"field": "value",
"chave": "valor",
"nome": "Eduardo"
}
{
"nome": "Eduardo",
"telefones": ["999999999", "88888888"]
"endereço": {
"logradouro": "Rua dos bobos",
"numero" : 0
}
}
{
"nome": "Eduardo",
"telefones": ["999999999", "88888888"] # array
"endereço": { # sub documento
"logradouro": "Rua dos bobos",
"numero" : 0
}
}
Mon Um banco de
goDB dados orientado a
documentos
Uma visita ao site oficial
https://www.mongodb.com/pt-br
MongoDB
● SSPL - Server Side public License
● 2009
● Baseado em documentos
● Tem uma grande gama de plugins disponíveis
Relações com SQL
SQL Mongo
Database Database
Tabela Coleção
Linha Documento
ID _id
Iniciando o mongo
Vamos usar docker, mas você pode
instalar em sua máquina se quiser
ou usar na nuvem com atlas
https://hub.docker.com/_/mongo/
Pincelando o express
O mongo-express é uma interface web amigável para o gerenciamento do
mongo, pode servir para exemplificar e visualizar os dados.
https://hub.docker.com/_/mongo/
Bson
Bynary JSON, além de ocupar menos espaço por ser binário, permite tipos
diferentes de dados como:
● byte
● int [32, 64]
● uint (somente positivos)
● double
● decimal
● date
● objectId
● array
Códi Viemos aqui pra
go isso, não é
mesmo?
Bibliotecas Python
● pymongo - Oficial sync
● motor - Oficial Async
● MongoEngine - ODM
● ODMantic - ODM async
Bibliotecas Python
● pymongo - Oficial sync
● motor - Oficial Async
● MongoEngine - ODM
● ODMantic - ODM async
Acessando o banco e as coleções
Bora fazer um CRUD? - Create
Bora fazer um CRUD? - Read
Operadores de queries
Operadores de queries - comparação
operador O que faz?
$eq Igual a (==)
$ne Diferente de (!=)
$gt Maior que (>)
$qte Maior ou igual (>=)
$lt Menor que (>)
$lte Menor ou igual (<=)
$in / $nin Igual (ou diferente) a um do array
Bora fazer um CRUD? - Update
Operadores de update
operador O que faz?
$set Faz o update
$unset Remove o campo
$rename Renomeia o campo
Bora fazer um CRUD? - Update
Bora fazer um CRUD? - Delete
picpay.me/dunossauro apoia.se/livedepython PIX
Ajude o projeto