Minicurso Introdução ao mongoDB SCTI

49
Introdução ao MongoDB Christiano Anderson http://christiano.me Twitter: @dump E-mail: [email protected]

description

Por: Christiano Anderson

Transcript of Minicurso Introdução ao mongoDB SCTI

Page 1: Minicurso Introdução ao mongoDB SCTI

Introdução ao MongoDB

Christiano Andersonhttp://christiano.meTwitter: @dumpE-mail: [email protected]

Page 2: Minicurso Introdução ao mongoDB SCTI

Conceitos básicos

● Uma base de dados é composta de várias “coleções”;

● Uma coleção é composta de vários “documentos”

● Um documento é composto de vários “campos”

Page 3: Minicurso Introdução ao mongoDB SCTI

Definições

Banco Relacional MongoDB

Base de dados --> Base de Dados

Tabela --> Coleção

Registro --> Documento

Índice --> Índice

Join --> Documento embarcado

Foreign key --> Referência

Page 4: Minicurso Introdução ao mongoDB SCTI

Instalação

● A forma mais fácil é usar o gerenciador de pacotes da sua própria distribuição.

http://bit.ly/mongo_no_debian

Page 5: Minicurso Introdução ao mongoDB SCTI

MongoDB Shell

$ mongo

Page 6: Minicurso Introdução ao mongoDB SCTI

MongoDB Shell

● Roda engine JavaScript;● Permite manipular todo o banco de dados;● Permite criar funções;● Ler arquivos externos;● Realizar comandos administrativos;

Page 7: Minicurso Introdução ao mongoDB SCTI

Mongo Shell

anderson@endor:~$ mongoMongoDB shell version: 2.4.6connecting to: test> a = 1010> b = 3030> a < btrue> b < afalse

Page 8: Minicurso Introdução ao mongoDB SCTI

Consultando bases disponíveis

anderson@endor:~$ mongoMongoDB shell version: 2.4.6connecting to: test> show dbsbusca 0.203125GBdieese 5.951171875GBeasytaxi 0.453125GBlocal 0.078125GBmobile 0.203125GB>

Page 9: Minicurso Introdução ao mongoDB SCTI

Tudo é dinâmico

● Diferente de bancos relacionais, não há necessidade de criar modelagem antes;

● Ao definir algum valor, os dados são automaticamente criados;

● Tipagem forte;

Page 10: Minicurso Introdução ao mongoDB SCTI

Criando uma base de dadosanderson@endor:~$ mongoMongoDB shell version: 2.4.6connecting to: test> use uenfswitched to db uenf>

A base já foi criada

Page 11: Minicurso Introdução ao mongoDB SCTI

Inserindo registros

> db.alunos.insert({... nome: 'Christiano',... sobrenome: 'Anderson',... sexo: 'masculino',... idade: 33,... materias: ['MongoDB','Python','Lógica de Programação']... })>

A coleção “alunos” foi automaticamente criada

String entre aspas

Inteiro ou float sem aspas

Lista de valores

Page 12: Minicurso Introdução ao mongoDB SCTI

Listando as coleções

> show collectionsalunossystem.indexes>

Page 13: Minicurso Introdução ao mongoDB SCTI

Consultando todos os registros da coleção

> db.alunos.find({}){ "_id" : ObjectId("522f22b08434c181910716eb"), "nome" : "Christiano", "sobrenome" : "Anderson", "sexo" : "masculino", "idade" : 33, "materias" : [ "MongoDB", "Python", "Lógica de Programação" ] }>

Page 14: Minicurso Introdução ao mongoDB SCTI

Pretty

> db.alunos.find({}).pretty(){ "_id" : ObjectId("522f22b08434c181910716eb"), "nome" : "Christiano", "sobrenome" : "Anderson", "sexo" : "masculino", "idade" : 33, "materias" : [ "MongoDB", "Python", "Lógica de Programação" ]}>

Page 15: Minicurso Introdução ao mongoDB SCTI

Inserindo mais um documento> db.alunos.insert({... nome: 'Carolina',... sobrenome: 'Ferreira',... sexo: 'feminino',... idade: 29,... email: '[email protected]',... materias: ['MongoDB','Riak','Java'],... notas: {'MongoDB': 10, 'Riak': 8, 'Java': 9}... })>

Esse campo não tinha noRegistro anterior

Documento dentro dedocumento

Page 16: Minicurso Introdução ao mongoDB SCTI

Listando apenas o documento da Carolina

> db.alunos.find({'nome':'Carolina'}).pretty(){ "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "[email protected]", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 }}>

Page 17: Minicurso Introdução ao mongoDB SCTI

Inserindo mais um documento

> db.alunos.insert({... nome: 'Juliana',... sobrenome: 'Silva',... sexo: 'feminino',... idade: 21,... materias: ['Riak','Python']... })

Page 18: Minicurso Introdução ao mongoDB SCTI

Contando documentos

> db.alunos.count()3

Page 19: Minicurso Introdução ao mongoDB SCTI

Contando apenas sexo feminino

> db.alunos.count({sexo:'feminino'})2>

Page 20: Minicurso Introdução ao mongoDB SCTI

Listando apenas quem é do sexo feminino

> db.alunos.find({sexo:'feminino'})

{ "_id" : ObjectId("5230ee7ec3141857756a81a8"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "[email protected]", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } }{ "_id" : ObjectId("5230eec6c3141857756a81a9"), "nome" : "Juliana", "sobrenome" : "Silva", "sexo" : "feminino", "idade" : 21, "materias" : [ "Riak", "Python" ] }

Page 21: Minicurso Introdução ao mongoDB SCTI

Listando quem tem MongoDB na matéria

> db.alunos.find({materias:'MongoDB'}){ "_id" : ObjectId("522f22b08434c181910716eb"), "nome" : "Christiano", "sobrenome" : "Anderson", "sexo" : "masculino", "idade" : 33, "materias" : [ "MongoDB", "Python", "Lógica de Programação" ] }{ "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "[email protected]", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } }>

Page 22: Minicurso Introdução ao mongoDB SCTI

Listando quem tem menos de 30 anos

> db.alunos.find({idade: {$lt: 30} })

{ "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "[email protected]", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } }{ "_id" : ObjectId("522f264c8434c181910716ed"), "nome" : "Juliana", "sobrenome" : "Silva", "sexo" : "feminino", "idade" : 21, "materias" : [ "Riak", "Python" ] }>

Page 23: Minicurso Introdução ao mongoDB SCTI

Alguns operadores de consulta

Operador Descrição

$gt Maior que

$gte Maior ou igual que

$lt Menor que

$lte Menor ou igual que

Page 24: Minicurso Introdução ao mongoDB SCTI

Updates

A Carolina casou e precisa mudar seu sobrenome, como fazer?

Page 25: Minicurso Introdução ao mongoDB SCTI

Atualização campo já existente em documento

> db.alunos.update({'nome':'Carolina'}, {$set: {'sobrenome':'Ferreira Martins'}})

Page 26: Minicurso Introdução ao mongoDB SCTI

Vamos ver como ficou...> db.alunos.find({'nome':'Carolina'}).pretty(){ "_id" : ObjectId("522f2b998434c181910716ee"), "email" : "[email protected]", "idade" : 29, "materias" : [ "MongoDB", "Riak", "Java" ], "nome" : "Carolina", "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 }, "sexo" : "feminino", "sobrenome" : "Ferreira Martins"}>

Page 27: Minicurso Introdução ao mongoDB SCTI

O que acontece se fizer isso?

> db.alunos.update({'nome':'Carolina'}, {'sobrenome':'Ferreira Martins'})

Page 28: Minicurso Introdução ao mongoDB SCTI

Removendo registros

db.alunos.remove({'sobrenome':'Ferreira Martins'})

Page 29: Minicurso Introdução ao mongoDB SCTI

Adicionando a Carolina novamente

http://pastebin.com/x38NFgu1

Page 30: Minicurso Introdução ao mongoDB SCTI

Listando apenas o primeiro nome de todo mundo na coleção

> db.alunos.find( {}, {'nome':true} )

{ "_id" : ObjectId("522f22b08434c181910716eb"), "nome" : "Christiano" }{ "_id" : ObjectId("522f264c8434c181910716ed"), "nome" : "Juliana" }{ "_id" : ObjectId("522f2b998434c181910716ee"), "nome" : "Carolina" }>

O MongoDB sempre vai mostrar o ObjectID, mas tem como tira-lo do resultado, veja...

Page 31: Minicurso Introdução ao mongoDB SCTI

Sem o ObjectID

> db.alunos.find({},{'nome':true, '_id': false})

{ "nome" : "Christiano" }{ "nome" : "Juliana" }{ "nome" : "Carolina" }

Page 32: Minicurso Introdução ao mongoDB SCTI

Ordenação – A até Z

> db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: 1})

{ "nome" : "Carolina" }{ "nome" : "Christiano" }{ "nome" : "Juliana" }

Page 33: Minicurso Introdução ao mongoDB SCTI

Ordenação inversa – Z até A

> db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: -1})

{ "nome" : "Christiano" }{ "nome" : "Carolina" }

>

{ "nome" : "Juliana" }

Page 34: Minicurso Introdução ao mongoDB SCTI

Ordenando mais novo ao mais velho

> db.alunos.find({}, {'nome': true, idade: true, '_id': false}).sort({idade: 1})

{ "nome" : "Juliana", "idade" : 21 }{ "idade" : 29, "nome" : "Carolina" }{ "nome" : "Christiano", "idade" : 33 }>

Page 35: Minicurso Introdução ao mongoDB SCTI

Como descobrir quem não tem o campo email no documento?

> db.alunos.find({'email': {$exists: false} })

Page 36: Minicurso Introdução ao mongoDB SCTI

Adicionando um campo em todos os documentos

Como adicionar um campo tipo bool (True, False) em todos os registros?

Page 37: Minicurso Introdução ao mongoDB SCTI

Veja bem....

> db.alunos.update({ },

{ $set: { 'aprovado': true } },

{ multi: true })

O que adicionar

Query

Grava a alteração em todosOs registros que atendem

Ao critério

Page 38: Minicurso Introdução ao mongoDB SCTI

Trabalhando com documentos embarcados (Join)

> db.materias.insert( { 'titulo':'MongoDB','alunos': [ ] } )

Page 39: Minicurso Introdução ao mongoDB SCTI

Referenciando ao ObjectID da Carolina

> db.materias.update( { 'titulo':'MongoDB' },{ $addToSet: { 'alunos':ObjectId("522f2b998434c181910716ee") } } )

Page 40: Minicurso Introdução ao mongoDB SCTI

Referenciando ao ObjectID do Christiano

> db.materias.update({'titulo':'MongoDB'},{$addToSet:{'alunos':ObjectId("522f22b08434c181910716eb")}})

Page 41: Minicurso Introdução ao mongoDB SCTI

Resultado

> db.materias.find().pretty(){ "_id" : ObjectId("522f52b3fc53342aee8297f6"), "alunos" : [ ObjectId("522f2b998434c181910716ee"), ObjectId("522f22b08434c181910716eb") ], "titulo" : "MongoDB"}

Page 42: Minicurso Introdução ao mongoDB SCTI

Parte II

Python e MongoDB

Page 43: Minicurso Introdução ao mongoDB SCTI

Instalando Virtualenv

aptitude install python-virtualenv

Page 44: Minicurso Introdução ao mongoDB SCTI

Habilitando virtualenv

virtualenv pymongo

Page 45: Minicurso Introdução ao mongoDB SCTI

Iniciando virtualenv

source pymongo/bin/activate

(pymongo)anderson@endor:~$

Page 46: Minicurso Introdução ao mongoDB SCTI

Instalando o PyMongo via PIP

pip install pymongo

Page 47: Minicurso Introdução ao mongoDB SCTI

Testando a conexão

(pymongo)anderson@endor:~$ pythonPython 2.7.3 (default, Jan 2 2013, 13:56:14) [GCC 4.7.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>>

Page 48: Minicurso Introdução ao mongoDB SCTI

Listando os nomes dos alunos

(pymongo)anderson@endor:~$ pythonPython 2.7.3 (default, Jan 2 2013, 13:56:14) [GCC 4.7.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> from pymongo import MongoClient>>> client = MongoClient()>>> db = client.fef>>> col_alunos = db.alunos>>> todos_alunos = col_alunos.find({})>>> for aluno in todos_alunos:... print aluno['nome']... ChristianoCarolinaCarlos>>>