SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
{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

Mais conteúdo relacionado

Mais procurados

Inside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseInside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseMike Dirolf
 
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...Edureka!
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architectureBishal Khanal
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to CassandraGokhan Atil
 
Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...
Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...
Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...Gabriele Baldassarre
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixAndré Déo
 
Apresentação - MongoDB
Apresentação - MongoDBApresentação - MongoDB
Apresentação - MongoDBJDSBD
 
What is NoSQL and CAP Theorem
What is NoSQL and CAP TheoremWhat is NoSQL and CAP Theorem
What is NoSQL and CAP TheoremRahul Jain
 
Benchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and ResultsBenchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and ResultsNGINX, Inc.
 
Introduction au web sémantique
Introduction au web sémantiqueIntroduction au web sémantique
Introduction au web sémantiqueStéphane Traumat
 
Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL DatabasesDerek Stainer
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceAndrea Della Corte
 

Mais procurados (20)

Inside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseInside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source Database
 
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
Elasticsearch Tutorial | Getting Started with Elasticsearch | ELK Stack Train...
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architecture
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to Cassandra
 
Introduction to W3C Linked Data Platform
Introduction to W3C Linked Data PlatformIntroduction to W3C Linked Data Platform
Introduction to W3C Linked Data Platform
 
Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...
Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...
Talend Open Studio Fundamentals #1: Workspaces, Jobs, Metadata and Trips & Tr...
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
Postgresql
PostgresqlPostgresql
Postgresql
 
Apresentação - MongoDB
Apresentação - MongoDBApresentação - MongoDB
Apresentação - MongoDB
 
What is NoSQL and CAP Theorem
What is NoSQL and CAP TheoremWhat is NoSQL and CAP Theorem
What is NoSQL and CAP Theorem
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
Benchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and ResultsBenchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and Results
 
NoSQL
NoSQLNoSQL
NoSQL
 
Deep Dive on Amazon S3
Deep Dive on Amazon S3Deep Dive on Amazon S3
Deep Dive on Amazon S3
 
Introduction au web sémantique
Introduction au web sémantiqueIntroduction au web sémantique
Introduction au web sémantique
 
Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL Databases
 
Modelagem de dados
Modelagem de dados Modelagem de dados
Modelagem de dados
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Cassandra Database
Cassandra DatabaseCassandra Database
Cassandra Database
 

Semelhante a 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
 

Semelhante a 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
 

Mais de Derek Willian Stavis

Mais de 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; }