minicurso introdução ao mongodb scti
DESCRIPTION
Por: Christiano AndersonTRANSCRIPT
![Page 1: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/1.jpg)
Introdução ao MongoDB
Christiano Andersonhttp://christiano.meTwitter: @dumpE-mail: [email protected]
![Page 2: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/5.jpg)
MongoDB Shell
$ mongo
![Page 6: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/12.jpg)
Listando as coleções
> show collectionsalunossystem.indexes>
![Page 13: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/18.jpg)
Contando documentos
> db.alunos.count()3
![Page 19: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/19.jpg)
Contando apenas sexo feminino
> db.alunos.count({sexo:'feminino'})2>
![Page 20: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/24.jpg)
Updates
A Carolina casou e precisa mudar seu sobrenome, como fazer?
![Page 25: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/25.jpg)
Atualização campo já existente em documento
> db.alunos.update({'nome':'Carolina'}, {$set: {'sobrenome':'Ferreira Martins'}})
![Page 26: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/27.jpg)
O que acontece se fizer isso?
> db.alunos.update({'nome':'Carolina'}, {'sobrenome':'Ferreira Martins'})
![Page 28: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/28.jpg)
Removendo registros
db.alunos.remove({'sobrenome':'Ferreira Martins'})
![Page 29: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/29.jpg)
Adicionando a Carolina novamente
http://pastebin.com/x38NFgu1
![Page 30: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/31.jpg)
Sem o ObjectID
> db.alunos.find({},{'nome':true, '_id': false})
{ "nome" : "Christiano" }{ "nome" : "Juliana" }{ "nome" : "Carolina" }
![Page 32: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/38.jpg)
Trabalhando com documentos embarcados (Join)
> db.materias.insert( { 'titulo':'MongoDB','alunos': [ ] } )
![Page 39: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/39.jpg)
Referenciando ao ObjectID da Carolina
> db.materias.update( { 'titulo':'MongoDB' },{ $addToSet: { 'alunos':ObjectId("522f2b998434c181910716ee") } } )
![Page 40: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/40.jpg)
Referenciando ao ObjectID do Christiano
> db.materias.update({'titulo':'MongoDB'},{$addToSet:{'alunos':ObjectId("522f22b08434c181910716eb")}})
![Page 41: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/41.jpg)
Resultado
> db.materias.find().pretty(){ "_id" : ObjectId("522f52b3fc53342aee8297f6"), "alunos" : [ ObjectId("522f2b998434c181910716ee"), ObjectId("522f22b08434c181910716eb") ], "titulo" : "MongoDB"}
![Page 42: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/42.jpg)
Parte II
Python e MongoDB
![Page 43: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/43.jpg)
Instalando Virtualenv
aptitude install python-virtualenv
![Page 44: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/44.jpg)
Habilitando virtualenv
virtualenv pymongo
![Page 45: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/45.jpg)
Iniciando virtualenv
source pymongo/bin/activate
(pymongo)anderson@endor:~$
![Page 46: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/46.jpg)
Instalando o PyMongo via PIP
pip install pymongo
![Page 47: Minicurso Introdução ao mongoDB SCTI](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052400/559e5b8f1a28abe67f8b45e6/html5/thumbnails/48.jpg)
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>>>