SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
{name: “mongo”, type: “db”}
Fundação
Sistema MongoDB
•Conjunto de Banco de Dados
•Banco de Dados
• Um conjunto de Coleções
Coleção
•Agrupamento de Documentos
• Análogo a Tabela no Modelo Relacional
• Usualmente com a mesma estrutura
• Não é regra. Coleções são livres de Esquema!
•Armazenados no formato BSON
• Representação binária de um JSON
Documento
•Instância de Objeto Javascript
• Conjunto de Chave-valor
• Sem métodos, hierarquia de classes, etc.
• CodiWicação Binária (BSON)
• Tamanho máximo de 16Mb
Tipos de Dado
•Tipos básicos de dados presentes no JavaScript
• String, Array
• Integer, Double
• Boolean, NULL
• Object
•Tipos especiais do MongoDB
• ObjectID
• BinaryData
• Regular Expression
• Code
Campo
•Chave
• Um nome para o campo, representado como String
•Valor
• Valor referente a chave
{ nome: ‘Mongo’, tipo: ‘DB’ }
Metodologia de Query
•Orientada a Documentos
{nome: {primeiro: 'José', ultimo: 'Junior'}}
{nome.ultimo: 'Junior'}
{nome.ultimo: /^D/}
{tags: {$in: ['armazenamento', 'DBMS']}}
Funcionalidades
Funcionalidades
•Critérios de Pesquisa
• por Campo
• por Intervalo
• por Expressões Regulares
•Índices
• Primários e secundários
Funcionalidades
•Balanceamento de Carga
• Sharding
•Armazenamento de Arquivos
• via GridFS
•Suporte a Agregação
• via MapReduce
Funcionalidades
•Execução de JavaScript
• Server-side
• Queries e MapReduce
• Tempo de pesquisa
• Documento
•Coleções limitadas
• Tamanho Wixo
• Respeita ordem de inserção
• Lista circular
Interagindo com o banco de dados
O Mongo Shell
Mongo Shell
•Método de Interação direta com o Banco
• Similar ao Shell MySQL
•JavaScript
• Linguagem padrão da shell do Mongo
$ cd mongo-db
$ bin/mongo
MongoDB shell version: 1.8
url: test
connecting to: test
type "help" for help
>
MongoDB shell version: 1.8
url: test
connecting to: test
type "help" for help
>
> for (var i = 1; i < 5; i++) db.things.save({x : 4, y : j});
> db.things.find();
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
>
Inserção de Documentos
•Objeto db.nome_da_coleção
• Criação lazy das Coleções
• Método save()
Recuperação de
Documentos
> db.things.find();
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
> var cursor = db.things.find();
> while(cursor.hasNext()) printjson(cursor.next());
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
•Método find()
• Objeto cursor
• Estruturas de iteração
Estruturas de Iteração
> db.things.find({j : 1}).forEach(printjson);
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
> db.things.save({x : 10, j : 1});
> db.things.find({j : 1}).forEach(printjson);
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd870"), "x" : 10, "j" : 1 }
> db.things.find({j : 1}, {j:true}).forEach(printjson);
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd870"), "j" : 1 }
> db.things.findOne({j : 1});
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
> db.things.find().limit(2);
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
Remoção de Documentos
•Método remove()
• Operadores de ModiWicação
• Atomicidade
• Execução Server-side
• Operações Bitwise
MongoDB shell version: 1.8
url: test
connecting to: test
type "help" for help
>
> db.alunos.remove({}); // remove todos os documentos da coleção
>
> db.alunos.remove({n:1}); // remove todos documentos com n = 1
>
> db.alunos.remove( { nota : { $lt : 7 }, $atomic : true } )
Atualização de
Documentos
•Substituição
• Comando update(critério, novoObjeto, upsert, multi)
• Operação Custosa
•Operadores de ModiWicação
• Atomicidade
• Execução Server-side
• Operações Bitwise
Operadores de
ModiCicação
•Caractere $
• Sozinho
• Índice no vetor de registros resultante da query
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "titulo" : "ABC",
"comentarios" : [ { "por" : "joão", "likes" : 3 }, { "por" :
"maria", "likes" : 7 } ] }
> t.update( {'comentarios.por':'joão'}, {$inc:{'comentários.
$.likes':1}}, false, true )
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "titulo" : "ABC",
"comentarios" : [ { "por" : "joão", "likes" : 4 }, { "por" :
"maria", "likes" : 7 } ] }
Operadores de
ModiCicação
•Incremento
• $inc : {‘likes’ : n}
• Incrementa n vezes o campo likes
•Setter
• $set : {‘likes’ : m}
•Seta o campo likes para m
•Push
• $push : {‘comments’:{‘nome’:‘Derek’}
• Adiciona elemento no vetor comments
• Cria vetor caso não existir, adicionando o elemento
Operadores de
ModiCicação
•addToSet
• $addToSet:{a:{[‘c1’:‘v1’, ‘cN:‘vN’]}
•Each
• {$each : [1, 2, 3, 4, 5]}
•Pode ser usado em conjunto com o $addToSet
•Pop
• $pop : {campo: 1 }
• Remove o último elemento de um vetor
• $pop : {campo: 1 }
• Remove o primeiro elemento de um vetor
Operadores de
ModiCicação
•Pull
• $pull:{pessoas : {nome : “José”}}
•Remove todas ocorrências com nome José
•PullAll
• $pull:{cursos : {dia : [15, 20] } }
•Remove todas ocorrências com dia 15 e 20
•Rename
• $rename : { horas : horas_extra }
• Renomeia o campo hora para horas_extra
Operadores de
ModiCicação
•Bitwise
• Só pode ser usado com inteiros
• $bit:{bitmap : {red : {and:5} }}
• $bit:{bitmap : {green : {or:20} }}
• $bit:{bitmap : {green : {and:5, or:20} }}
•Operador de atomicidade
• Escritas de campos são feitas atômicamente
• Atualizações com multi não são atômicas
• Usar o operador $atomic para garantir atomicidade
• db.t.update({nota: {$gt: 60}, $atomic: true}, {$set: {aprv: true}}, false,
true);
Operadores de
ModiCicação
•Utilização com Upserts
• Diferentes operadores em um mesmo update não podem
referenciar o mesmo campo
•Não podem referenciar o campo _id
MapReduce
•Conceito básico
• Opera sobre um conjunto de dados
• Pipeline distribuído
• Análogo ao GROUP BY no SQL
•Vantagem
• Paralelismo
• Sharding
• Extensibilidade
MapReduce
•Exemplo
• Agregar todos os “likes” nos comentários de um usuário
•Modelo de Dados
• Coleção de Comentários
MongoDB shell version: 2.0
url: test
connecting to: test
type "help" for help
>
> var doc = { usuario : “João”,
likes : 20,
comentario : “Teste” };
>
> db.comentarios.save(doc);
Função Map
•Mapear os dados
• Mapear por Nome
• Agregar em vetor
• Contagem e número de Likes
> function funcaoMap() {
emit(this.username,
{contagem : 1,
likes : this.likes});
}
Função Reduce
•Recebe retorno da função Map
• Chamada para cada chave retornada pela função Map
• Cada chave tem um array de objetos relacionado a ela
• Deve ser compatível com o objeto emitido pela Map
> function funcaoReduce(key, value) {
var result = {count: 0, likes: 0};
values.forEach(function(value) {
result.count += value.count;
result.likes += value.likes;
});
return result;
}
Referência
http://www.mongodb.org/
Download do MongoDB
Documentação oWicial
Fórum de discussão
Apresentação do
por
Derek Willian Stavis

Weitere ähnliche Inhalte

Was ist angesagt?

A Modern Data Architecture for Microservices
A Modern Data Architecture for MicroservicesA Modern Data Architecture for Microservices
A Modern Data Architecture for MicroservicesAmazon Web Services
 
Azure data analytics platform - A reference architecture
Azure data analytics platform - A reference architecture Azure data analytics platform - A reference architecture
Azure data analytics platform - A reference architecture Rajesh Kumar
 
Introduction to MongoDB.pptx
Introduction to MongoDB.pptxIntroduction to MongoDB.pptx
Introduction to MongoDB.pptxSurya937648
 
PySpark in practice slides
PySpark in practice slidesPySpark in practice slides
PySpark in practice slidesDat Tran
 
Getting Started with Amazon ElastiCache
Getting Started with Amazon ElastiCacheGetting Started with Amazon ElastiCache
Getting Started with Amazon ElastiCacheAmazon Web Services
 
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018Amazon Web Services
 
DataMinds 2022 Azure Purview Erwin de Kreuk
DataMinds 2022 Azure Purview Erwin de KreukDataMinds 2022 Azure Purview Erwin de Kreuk
DataMinds 2022 Azure Purview Erwin de KreukErwin de Kreuk
 
Neanex - Semantic Construction with Graphs
Neanex - Semantic Construction with GraphsNeanex - Semantic Construction with Graphs
Neanex - Semantic Construction with GraphsNeo4j
 
Uses and Best Practices for Amazon Redshift
Uses and Best Practices for Amazon Redshift Uses and Best Practices for Amazon Redshift
Uses and Best Practices for Amazon Redshift Amazon Web Services
 
Vector databases and neural search
Vector databases and neural searchVector databases and neural search
Vector databases and neural searchDmitry Kan
 
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교Amazon Web Services Korea
 
Building Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon RedshiftBuilding Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon RedshiftAmazon Web Services
 
Time to Talk about Data Mesh
Time to Talk about Data MeshTime to Talk about Data Mesh
Time to Talk about Data MeshLibbySchulze
 
효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...
효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...
효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...Amazon Web Services Korea
 
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...Databricks
 
Big Data Architectural Patterns and Best Practices on AWS
Big Data Architectural Patterns and Best Practices on AWSBig Data Architectural Patterns and Best Practices on AWS
Big Data Architectural Patterns and Best Practices on AWSAmazon Web Services
 
Microsoft Azure Databricks
Microsoft Azure DatabricksMicrosoft Azure Databricks
Microsoft Azure DatabricksSascha Dittmann
 

Was ist angesagt? (20)

A Modern Data Architecture for Microservices
A Modern Data Architecture for MicroservicesA Modern Data Architecture for Microservices
A Modern Data Architecture for Microservices
 
Azure data analytics platform - A reference architecture
Azure data analytics platform - A reference architecture Azure data analytics platform - A reference architecture
Azure data analytics platform - A reference architecture
 
Introduction to MongoDB.pptx
Introduction to MongoDB.pptxIntroduction to MongoDB.pptx
Introduction to MongoDB.pptx
 
PySpark in practice slides
PySpark in practice slidesPySpark in practice slides
PySpark in practice slides
 
Getting Started with Amazon ElastiCache
Getting Started with Amazon ElastiCacheGetting Started with Amazon ElastiCache
Getting Started with Amazon ElastiCache
 
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
 
Vector database
Vector databaseVector database
Vector database
 
DataMinds 2022 Azure Purview Erwin de Kreuk
DataMinds 2022 Azure Purview Erwin de KreukDataMinds 2022 Azure Purview Erwin de Kreuk
DataMinds 2022 Azure Purview Erwin de Kreuk
 
Neanex - Semantic Construction with Graphs
Neanex - Semantic Construction with GraphsNeanex - Semantic Construction with Graphs
Neanex - Semantic Construction with Graphs
 
Uses and Best Practices for Amazon Redshift
Uses and Best Practices for Amazon Redshift Uses and Best Practices for Amazon Redshift
Uses and Best Practices for Amazon Redshift
 
Vector databases and neural search
Vector databases and neural searchVector databases and neural search
Vector databases and neural search
 
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
 
Deep Dive on Amazon S3
Deep Dive on Amazon S3Deep Dive on Amazon S3
Deep Dive on Amazon S3
 
Building Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon RedshiftBuilding Your Data Warehouse with Amazon Redshift
Building Your Data Warehouse with Amazon Redshift
 
Time to Talk about Data Mesh
Time to Talk about Data MeshTime to Talk about Data Mesh
Time to Talk about Data Mesh
 
AWS Lambda
AWS LambdaAWS Lambda
AWS Lambda
 
효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...
효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...
효과적인 NoSQL (Elasticahe / DynamoDB) 디자인 및 활용 방안 (최유정 & 최홍식, AWS 솔루션즈 아키텍트) :: ...
 
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
The Modern Data Team for the Modern Data Stack: dbt and the Role of the Analy...
 
Big Data Architectural Patterns and Best Practices on AWS
Big Data Architectural Patterns and Best Practices on AWSBig Data Architectural Patterns and Best Practices on AWS
Big Data Architectural Patterns and Best Practices on AWS
 
Microsoft Azure Databricks
Microsoft Azure DatabricksMicrosoft Azure Databricks
Microsoft Azure Databricks
 

Ähnlich wie Introdução ao MongoDB: banco de dados não relacional

acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...ISCTE-IUL ACM Student Chapter
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
MongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggMongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggFelipe Guimarães
 
MongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéMongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéWagner Bonfiglio
 
Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)Junior Fernandes
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFBianca Caruso da Paixão
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e MongodbAline Ferreira
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomNelson Glauber Leal
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajoliCaue Fajoli
 

Ähnlich wie Introdução ao MongoDB: banco de dados não relacional (20)

acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
 
NoSQL e MongoDB
NoSQL e MongoDBNoSQL e MongoDB
NoSQL e MongoDB
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
MongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggMongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - Navegg
 
MongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéMongoDB - Workshop Buscapé
MongoDB - Workshop Buscapé
 
Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)Introdução ao nosql (mini curso)
Introdução ao nosql (mini curso)
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFF
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e Mongodb
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê Fajoli
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 

Mehr von Derek Willian Stavis

Mehr von Derek Willian Stavis (8)

React performance
React performanceReact performance
React performance
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event Loop
 
Node.js cluster
Node.js clusterNode.js cluster
Node.js cluster
 
Packing it all: JavaScript module bundling from 2000 to now
Packing it all: JavaScript module bundling from 2000 to nowPacking it all: JavaScript module bundling from 2000 to now
Packing it all: JavaScript module bundling from 2000 to now
 
Ramda, a functional JavaScript library
Ramda, a functional JavaScript libraryRamda, a functional JavaScript library
Ramda, a functional JavaScript library
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
Forget Grunt and Gulp! Webpack and NPM rule them all!
Forget Grunt and Gulp! Webpack and NPM rule them all!Forget Grunt and Gulp! Webpack and NPM rule them all!
Forget Grunt and Gulp! Webpack and NPM rule them all!
 
React for Beginners
React for BeginnersReact for Beginners
React for Beginners
 

Introdução ao MongoDB: banco de dados não relacional

  • 3. Sistema MongoDB •Conjunto de Banco de Dados •Banco de Dados • Um conjunto de Coleções
  • 4. Coleção •Agrupamento de Documentos • Análogo a Tabela no Modelo Relacional • Usualmente com a mesma estrutura • Não é regra. Coleções são livres de Esquema! •Armazenados no formato BSON • Representação binária de um JSON
  • 5. Documento •Instância de Objeto Javascript • Conjunto de Chave-valor • Sem métodos, hierarquia de classes, etc. • CodiWicação Binária (BSON) • Tamanho máximo de 16Mb
  • 6. Tipos de Dado •Tipos básicos de dados presentes no JavaScript • String, Array • Integer, Double • Boolean, NULL • Object •Tipos especiais do MongoDB • ObjectID • BinaryData • Regular Expression • Code
  • 7. Campo •Chave • Um nome para o campo, representado como String •Valor • Valor referente a chave { nome: ‘Mongo’, tipo: ‘DB’ }
  • 8. Metodologia de Query •Orientada a Documentos {nome: {primeiro: 'José', ultimo: 'Junior'}} {nome.ultimo: 'Junior'} {nome.ultimo: /^D/} {tags: {$in: ['armazenamento', 'DBMS']}}
  • 10. Funcionalidades •Critérios de Pesquisa • por Campo • por Intervalo • por Expressões Regulares •Índices • Primários e secundários
  • 11. Funcionalidades •Balanceamento de Carga • Sharding •Armazenamento de Arquivos • via GridFS •Suporte a Agregação • via MapReduce
  • 12. Funcionalidades •Execução de JavaScript • Server-side • Queries e MapReduce • Tempo de pesquisa • Documento •Coleções limitadas • Tamanho Wixo • Respeita ordem de inserção • Lista circular
  • 13. Interagindo com o banco de dados O Mongo Shell
  • 14. Mongo Shell •Método de Interação direta com o Banco • Similar ao Shell MySQL •JavaScript • Linguagem padrão da shell do Mongo $ cd mongo-db $ bin/mongo MongoDB shell version: 1.8 url: test connecting to: test type "help" for help >
  • 15. MongoDB shell version: 1.8 url: test connecting to: test type "help" for help > > for (var i = 1; i < 5; i++) db.things.save({x : 4, y : j}); > db.things.find(); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 } { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 } > Inserção de Documentos •Objeto db.nome_da_coleção • Criação lazy das Coleções • Método save()
  • 16. Recuperação de Documentos > db.things.find(); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 } { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 } > var cursor = db.things.find(); > while(cursor.hasNext()) printjson(cursor.next()); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 } { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 } •Método find() • Objeto cursor • Estruturas de iteração
  • 17. Estruturas de Iteração > db.things.find({j : 1}).forEach(printjson); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } > db.things.save({x : 10, j : 1}); > db.things.find({j : 1}).forEach(printjson); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd870"), "x" : 10, "j" : 1 } > db.things.find({j : 1}, {j:true}).forEach(printjson); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd870"), "j" : 1 } > db.things.findOne({j : 1}); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } > db.things.find().limit(2); { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 } { "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
  • 18. Remoção de Documentos •Método remove() • Operadores de ModiWicação • Atomicidade • Execução Server-side • Operações Bitwise MongoDB shell version: 1.8 url: test connecting to: test type "help" for help > > db.alunos.remove({}); // remove todos os documentos da coleção > > db.alunos.remove({n:1}); // remove todos documentos com n = 1 > > db.alunos.remove( { nota : { $lt : 7 }, $atomic : true } )
  • 19. Atualização de Documentos •Substituição • Comando update(critério, novoObjeto, upsert, multi) • Operação Custosa •Operadores de ModiWicação • Atomicidade • Execução Server-side • Operações Bitwise
  • 20. Operadores de ModiCicação •Caractere $ • Sozinho • Índice no vetor de registros resultante da query > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "titulo" : "ABC", "comentarios" : [ { "por" : "joão", "likes" : 3 }, { "por" : "maria", "likes" : 7 } ] } > t.update( {'comentarios.por':'joão'}, {$inc:{'comentários. $.likes':1}}, false, true ) > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "titulo" : "ABC", "comentarios" : [ { "por" : "joão", "likes" : 4 }, { "por" : "maria", "likes" : 7 } ] }
  • 21. Operadores de ModiCicação •Incremento • $inc : {‘likes’ : n} • Incrementa n vezes o campo likes •Setter • $set : {‘likes’ : m} •Seta o campo likes para m •Push • $push : {‘comments’:{‘nome’:‘Derek’} • Adiciona elemento no vetor comments • Cria vetor caso não existir, adicionando o elemento
  • 22. Operadores de ModiCicação •addToSet • $addToSet:{a:{[‘c1’:‘v1’, ‘cN:‘vN’]} •Each • {$each : [1, 2, 3, 4, 5]} •Pode ser usado em conjunto com o $addToSet •Pop • $pop : {campo: 1 } • Remove o último elemento de um vetor • $pop : {campo: 1 } • Remove o primeiro elemento de um vetor
  • 23. Operadores de ModiCicação •Pull • $pull:{pessoas : {nome : “José”}} •Remove todas ocorrências com nome José •PullAll • $pull:{cursos : {dia : [15, 20] } } •Remove todas ocorrências com dia 15 e 20 •Rename • $rename : { horas : horas_extra } • Renomeia o campo hora para horas_extra
  • 24. Operadores de ModiCicação •Bitwise • Só pode ser usado com inteiros • $bit:{bitmap : {red : {and:5} }} • $bit:{bitmap : {green : {or:20} }} • $bit:{bitmap : {green : {and:5, or:20} }} •Operador de atomicidade • Escritas de campos são feitas atômicamente • Atualizações com multi não são atômicas • Usar o operador $atomic para garantir atomicidade • db.t.update({nota: {$gt: 60}, $atomic: true}, {$set: {aprv: true}}, false, true);
  • 25. Operadores de ModiCicação •Utilização com Upserts • Diferentes operadores em um mesmo update não podem referenciar o mesmo campo •Não podem referenciar o campo _id
  • 26. MapReduce •Conceito básico • Opera sobre um conjunto de dados • Pipeline distribuído • Análogo ao GROUP BY no SQL •Vantagem • Paralelismo • Sharding • Extensibilidade
  • 27. MapReduce •Exemplo • Agregar todos os “likes” nos comentários de um usuário •Modelo de Dados • Coleção de Comentários MongoDB shell version: 2.0 url: test connecting to: test type "help" for help > > var doc = { usuario : “João”, likes : 20, comentario : “Teste” }; > > db.comentarios.save(doc);
  • 28. Função Map •Mapear os dados • Mapear por Nome • Agregar em vetor • Contagem e número de Likes > function funcaoMap() { emit(this.username, {contagem : 1, likes : this.likes}); }
  • 29. Função Reduce •Recebe retorno da função Map • Chamada para cada chave retornada pela função Map • Cada chave tem um array de objetos relacionado a ela • Deve ser compatível com o objeto emitido pela Map > function funcaoReduce(key, value) { var result = {count: 0, likes: 0}; values.forEach(function(value) { result.count += value.count; result.likes += value.likes; }); return result; }