{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

Introdução ao MongoDB em 30 slides

  • 1.
  • 2.
  • 3.
    Sistema MongoDB •Conjunto deBanco 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 ObjetoJavascript • 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 •Tiposbá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 nomepara o campo, representado como String •Valor • Valor referente a chave { nome: ‘Mongo’, tipo: ‘DB’ }
  • 8.
    Metodologia de Query •Orientadaa Documentos {nome: {primeiro: 'José', ultimo: 'Junior'}} {nome.ultimo: 'Junior'} {nome.ultimo: /^D/} {tags: {$in: ['armazenamento', 'DBMS']}}
  • 9.
  • 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 obanco de dados O Mongo Shell
  • 14.
    Mongo Shell •Método deInteraçã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étodoremove() • 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 • Comandoupdate(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 comUpserts • 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 • Operasobre um conjunto de dados • Pipeline distribuído • Análogo ao GROUP BY no SQL •Vantagem • Paralelismo • Sharding • Extensibilidade
  • 27.
    MapReduce •Exemplo • Agregar todosos “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 osdados • 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 retornoda 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; }
  • 30.
  • 31.