{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.