SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Introdução ao MongoDB
conceitos e práticas
26ª Semana da Computação - UNESP/IBILCE
Empresa Júnior de Ciência da Computação - ECCjr
Bruno Barreto Carvalho
Sobre mim
Estudante da UNESP desde 2014
Na Empresa Júnior desde 2015
Estudando Javascript desde agosto de 2015
Atualmente estudando assuntos relacionados a Big Data
Linguagens favoritas: Javascript e Scala
@carvalh0ak
Bruno Barreto Carvalho
box3x4
Empresa Júnior
- Desenvolve projetos e presta serviços nas áreas de
desenvolvimento de softwares, soluções para web e consultoria
computacional, principalmente para micro e pequenas empresas.
Sempre aberta a trabalhar com novas tecnologias.
- Infelizmente ainda nao fizemos um projeto usando o MongoDB,
mas eu tenho esperanças ainda!
Contatos
eccjr.com.br
facebook.com/eccjrunesp
contato@eccjr.com.br
O modelo relacional.
Breve história
- Edgar Frank Codd publica o primeiro artigo sobre bancos relacionais em 1970. Sua publicação
leva a criação do grupo System R.
- Depois, é criado a SQL(Structured Query Language) pelo System R, que é usada até hoje e virou
um padrão da indústria de tecnologia.
- Mais tarde, são criados os primeiros SGBDRs, que atacavam vários problemas que existiam nos
sistemas que foram criados anteriormente.
Mas qual o problema?
- Relação muito forte entre os dados
- Alguns problemas de escalabilidade
- Performance (?)
Com a explosão das redes sociais e computação em nuvem, viu-se que talvez
o modelo relacional nem sempre era a MELHOR ESCOLHA PARA TODOS OS
CASOS.
A alternativa.
So it begins...
Pensando nesses problemas, o modelo não-relacional voltou a ativa!
Os “novos bancos” apresentam características bem distintas(praticamente
opostas) dos bancos relacionais.
E sua principal característica: a falta(ou ausência) de relações, derp.
Filhos da “nova era”
Vários bancos de dados NoSQL surgiram. E junto com eles, várias maneiras de
armazenar os dados.
Alguns exemplos:
- Documentos
- Grafos
- Chave-Valor
- Tabular
Breve comparação.
Schema
Não Relacional Relacional
Escalabilidade
Não Relacional
Escalabilidade Horizontal
Relacional
Escalabilidade Vertical
Normalização
Não Relacional Relacional
Atomicidade
Não Relacional Relacional
Casos de uso
Nosso objeto de estudo.
Mas antes...
- Javascript, Node.js
- JSON
Um pouco sobre ele
- HuMONGOus, 2007
- Bom banco para Operational Big Data
- Orientado a documentos
- Usa BSON para armazenar os documentos
- Mongo Server: GNU AGPL 3.0
- Mongo Drivers: Apache 2.0
Um típico documento
Um típico documento no mongoDB
Variedade de tipos
Algumas empresinhas...
High Tech Outras
O _id
_id é o equivalente a uma chave primária do SQL.
É a ÚNICA chave primária usada no banco
ObjectId -> 4 bytes representando os segundos desde a era Unix
Identificador de máquina de 3 bytes
2 bytes do ID do processo
Contador de 3 bytes, começando de um valor aleatório
CRUD
Que isso?
- CRUD representa as operações básicas dos bancos de dados: Create,
Read, Update, Delete
- O Mongo possui todas essas operações, e também tem a possibilidade de
misturar elas
Create
insertOne
Recebe: arg1: UM documento, que será inserido na coleção
arg2: um documento com o atributo writeConcern (opcional)
Retorna: um documento com os atributos:
acknowledged: boolean, insertedId: ObjectId do documento inserido
insertMany
Recebe: arg1: um ARRAY de DOCUMENTOS, que serão inseridos na coleção
arg2: um documento com os atributos: writeConcern, ordered (opcional)
Retorna: um documento com os atributos:
acknowledged: boolean, insertedIds: ObjectIds dos documentos inseridos
insert
Recebe: arg1: Um documento ou um array de documentos
arg2: um documento com os atributos: writeConcern, ordered (opcional)
Retorna: um documento com o atributo:
nInserted: número de documentos inseridos
ou um documento com os atributos:
writeErrors, writeConcernErros, nInserted, nUpserted, nMatched, nModified,
nRemoved, upserted
Read
find
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com a projeção do resultado
Retorna: se tiver matches, retorna os documentos
senão, não retorna nada
existem também os finds híbridos: findAndModify, findOne, findOneAndDelete,
findOneAndReplace, findOneAndUpdate
Métodos adicionais importantes
sort: equivalente ao ORDER BY do sql, valor 1 é ASC e -1 é DESC
limit: limita o tamanho máximo do cursor que será retornado
batchSize: limita o número de documentos retornados, default = 20
skip: controla a partir de onde o banco irá começar a retornar os resultados
count: conta o número de documentos na coleção
Update
updateOne
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento que possui os atributos que serão mudados no documento encontrado
arg3: um documento com os atributos:
upsert: boolean, writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, matchedCount: numero de matches, modifiedCount: numero de
modificados
updateMany
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento que possui os atributos que serão mudados no documento encontrado
arg3: um documento com os atributos:
upsert: boolean, writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, matchedCount: numero de matches, modifiedCount: numero de
modificados, upsertedId: ObjectId do documento inserido(caso upsert esteja ativado)
update
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento que possui os atributos que serão mudados no documento encontrado
arg3: um documento com os atributos:
upsert: boolean, multi: boolean, writeConcern
Retorna: um objeto com os campos
nMatched: numero de documentos que deram match, nUpserted: numero de documentos que
foram inseridos via upsert, nModified: numero de documentos modificados
tags
São usadas com os métodos de update para alterar os documentos encontrados. Usados no arg2
dos métodos de update
$set: faz o update dos atributos especificados. Recebe um documento com os atributos a serem
alterados
$inc: incrementa o valor de um atributo numérico. Recebe um documento com os atributos a serem
incrementados
$rename: troca o nome de um atributo. Recebe um documento com os atributos a serem renomeados
$unset: remove atributos do documento. Recebe um documento com os atributos a serem excluidos
Delete
deleteOne
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com o atributo:
writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, deletedCount: número de documentos removidos
deleteMany
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com o atributo:
writeConcern
Retorna: um objeto com os campos
acknowledged: boolean, deletedCount: número de documentos removidos
remove
Recebe: arg1: um documento que representa a query a ser realizada
arg2: um documento com o atributo:
justOne: boolean, writeConcern
Retorna: um objeto com os campos
nRemoved: número de documentos removidos
O próximo passo
Muito obrigado!!!

Mais conteúdo relacionado

Semelhante a Introdução ao MongoDB

Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpecguest49d83b2
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Big Data Week São Paulo
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
Desenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernateDesenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernateVitor Silva
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfArleiEvaristo
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdfSecont
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 

Semelhante a Introdução ao MongoDB (20)

Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Introdução ao no sql e mongodb
Introdução ao no sql e mongodbIntrodução ao no sql e mongodb
Introdução ao no sql e mongodb
 
Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
Desenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernateDesenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernate
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdf
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 

Introdução ao MongoDB

  • 1. Introdução ao MongoDB conceitos e práticas 26ª Semana da Computação - UNESP/IBILCE Empresa Júnior de Ciência da Computação - ECCjr Bruno Barreto Carvalho
  • 2. Sobre mim Estudante da UNESP desde 2014 Na Empresa Júnior desde 2015 Estudando Javascript desde agosto de 2015 Atualmente estudando assuntos relacionados a Big Data Linguagens favoritas: Javascript e Scala @carvalh0ak Bruno Barreto Carvalho box3x4
  • 3. Empresa Júnior - Desenvolve projetos e presta serviços nas áreas de desenvolvimento de softwares, soluções para web e consultoria computacional, principalmente para micro e pequenas empresas. Sempre aberta a trabalhar com novas tecnologias. - Infelizmente ainda nao fizemos um projeto usando o MongoDB, mas eu tenho esperanças ainda! Contatos eccjr.com.br facebook.com/eccjrunesp contato@eccjr.com.br
  • 5. Breve história - Edgar Frank Codd publica o primeiro artigo sobre bancos relacionais em 1970. Sua publicação leva a criação do grupo System R. - Depois, é criado a SQL(Structured Query Language) pelo System R, que é usada até hoje e virou um padrão da indústria de tecnologia. - Mais tarde, são criados os primeiros SGBDRs, que atacavam vários problemas que existiam nos sistemas que foram criados anteriormente.
  • 6. Mas qual o problema? - Relação muito forte entre os dados - Alguns problemas de escalabilidade - Performance (?) Com a explosão das redes sociais e computação em nuvem, viu-se que talvez o modelo relacional nem sempre era a MELHOR ESCOLHA PARA TODOS OS CASOS.
  • 8. So it begins... Pensando nesses problemas, o modelo não-relacional voltou a ativa! Os “novos bancos” apresentam características bem distintas(praticamente opostas) dos bancos relacionais. E sua principal característica: a falta(ou ausência) de relações, derp.
  • 9. Filhos da “nova era” Vários bancos de dados NoSQL surgiram. E junto com eles, várias maneiras de armazenar os dados. Alguns exemplos: - Documentos - Grafos - Chave-Valor - Tabular
  • 16. Nosso objeto de estudo.
  • 17. Mas antes... - Javascript, Node.js - JSON
  • 18. Um pouco sobre ele - HuMONGOus, 2007 - Bom banco para Operational Big Data - Orientado a documentos - Usa BSON para armazenar os documentos - Mongo Server: GNU AGPL 3.0 - Mongo Drivers: Apache 2.0
  • 19. Um típico documento Um típico documento no mongoDB
  • 22. O _id _id é o equivalente a uma chave primária do SQL. É a ÚNICA chave primária usada no banco ObjectId -> 4 bytes representando os segundos desde a era Unix Identificador de máquina de 3 bytes 2 bytes do ID do processo Contador de 3 bytes, começando de um valor aleatório
  • 23. CRUD
  • 24. Que isso? - CRUD representa as operações básicas dos bancos de dados: Create, Read, Update, Delete - O Mongo possui todas essas operações, e também tem a possibilidade de misturar elas
  • 26. insertOne Recebe: arg1: UM documento, que será inserido na coleção arg2: um documento com o atributo writeConcern (opcional) Retorna: um documento com os atributos: acknowledged: boolean, insertedId: ObjectId do documento inserido
  • 27. insertMany Recebe: arg1: um ARRAY de DOCUMENTOS, que serão inseridos na coleção arg2: um documento com os atributos: writeConcern, ordered (opcional) Retorna: um documento com os atributos: acknowledged: boolean, insertedIds: ObjectIds dos documentos inseridos
  • 28. insert Recebe: arg1: Um documento ou um array de documentos arg2: um documento com os atributos: writeConcern, ordered (opcional) Retorna: um documento com o atributo: nInserted: número de documentos inseridos ou um documento com os atributos: writeErrors, writeConcernErros, nInserted, nUpserted, nMatched, nModified, nRemoved, upserted
  • 29. Read
  • 30. find Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento com a projeção do resultado Retorna: se tiver matches, retorna os documentos senão, não retorna nada existem também os finds híbridos: findAndModify, findOne, findOneAndDelete, findOneAndReplace, findOneAndUpdate
  • 31. Métodos adicionais importantes sort: equivalente ao ORDER BY do sql, valor 1 é ASC e -1 é DESC limit: limita o tamanho máximo do cursor que será retornado batchSize: limita o número de documentos retornados, default = 20 skip: controla a partir de onde o banco irá começar a retornar os resultados count: conta o número de documentos na coleção
  • 33. updateOne Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento que possui os atributos que serão mudados no documento encontrado arg3: um documento com os atributos: upsert: boolean, writeConcern Retorna: um objeto com os campos acknowledged: boolean, matchedCount: numero de matches, modifiedCount: numero de modificados
  • 34. updateMany Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento que possui os atributos que serão mudados no documento encontrado arg3: um documento com os atributos: upsert: boolean, writeConcern Retorna: um objeto com os campos acknowledged: boolean, matchedCount: numero de matches, modifiedCount: numero de modificados, upsertedId: ObjectId do documento inserido(caso upsert esteja ativado)
  • 35. update Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento que possui os atributos que serão mudados no documento encontrado arg3: um documento com os atributos: upsert: boolean, multi: boolean, writeConcern Retorna: um objeto com os campos nMatched: numero de documentos que deram match, nUpserted: numero de documentos que foram inseridos via upsert, nModified: numero de documentos modificados
  • 36. tags São usadas com os métodos de update para alterar os documentos encontrados. Usados no arg2 dos métodos de update $set: faz o update dos atributos especificados. Recebe um documento com os atributos a serem alterados $inc: incrementa o valor de um atributo numérico. Recebe um documento com os atributos a serem incrementados $rename: troca o nome de um atributo. Recebe um documento com os atributos a serem renomeados $unset: remove atributos do documento. Recebe um documento com os atributos a serem excluidos
  • 38. deleteOne Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento com o atributo: writeConcern Retorna: um objeto com os campos acknowledged: boolean, deletedCount: número de documentos removidos
  • 39. deleteMany Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento com o atributo: writeConcern Retorna: um objeto com os campos acknowledged: boolean, deletedCount: número de documentos removidos
  • 40. remove Recebe: arg1: um documento que representa a query a ser realizada arg2: um documento com o atributo: justOne: boolean, writeConcern Retorna: um objeto com os campos nRemoved: número de documentos removidos