Minicurso Introdução ao mongoDB SCTI

661 visualizações

Publicada em

Por: Christiano Anderson

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
661
No SlideShare
0
A partir de incorporações
0
Número de incorporações
15
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Minicurso Introdução ao mongoDB SCTI

  1. 1. Introdução ao MongoDB Christiano Anderson http://christiano.me Twitter: @dump E-mail: chris@christiano.me
  2. 2. 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”
  3. 3. 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
  4. 4. Instalação ● A forma mais fácil é usar o gerenciador de pacotes da sua própria distribuição. http://bit.ly/mongo_no_debian
  5. 5. MongoDB Shell $ mongo
  6. 6. MongoDB Shell ● Roda engine JavaScript; ● Permite manipular todo o banco de dados; ● Permite criar funções; ● Ler arquivos externos; ● Realizar comandos administrativos;
  7. 7. Mongo Shell anderson@endor:~$ mongo MongoDB shell version: 2.4.6 connecting to: test > a = 10 10 > b = 30 30 > a < b true > b < a false
  8. 8. Consultando bases disponíveis anderson@endor:~$ mongo MongoDB shell version: 2.4.6 connecting to: test > show dbs busca 0.203125GB dieese 5.951171875GB easytaxi 0.453125GB local 0.078125GB mobile 0.203125GB >
  9. 9. 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;
  10. 10. Criando uma base de dados anderson@endor:~$ mongo MongoDB shell version: 2.4.6 connecting to: test > use uenf switched to db uenf > A base já foi criada
  11. 11. Inserindo registros A coleção “alunos” foi automaticamente criada > db.alunos.insert({ ... nome: 'Christiano', String entre aspas ... sobrenome: 'Anderson', ... sexo: 'masculino', ... idade: 33, Inteiro ou float sem aspas ... materias: ['MongoDB','Python','Lógica de Programação'] ... }) > Lista de valores
  12. 12. Listando as coleções > show collections alunos system.indexes >
  13. 13. 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" ] } >
  14. 14. Pretty > db.alunos.find({}).pretty() { "_id" : ObjectId("522f22b08434c181910716eb"), "nome" : "Christiano", "sobrenome" : "Anderson", "sexo" : "masculino", "idade" : 33, "materias" : [ "MongoDB", "Python", "Lógica de Programação" ] } >
  15. 15. Inserindo mais um documento > db.alunos.insert({ ... nome: 'Carolina', ... sobrenome: 'Ferreira', ... sexo: 'feminino', ... idade: 29, ... email: 'carol@yahoo.com', ... materias: ['MongoDB','Riak','Java'], ... notas: {'MongoDB': 10, 'Riak': 8, 'Java': 9} ... }) > Esse campo não tinha no Registro anterior Documento dentro de documento
  16. 16. Listando apenas o documento da Carolina > db.alunos.find({'nome':'Carolina'}).pretty() { "_id" : ObjectId("522f25248434c181910716ec"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } } >
  17. 17. Inserindo mais um documento > db.alunos.insert({ ... nome: 'Juliana', ... sobrenome: 'Silva', ... sexo: 'feminino', ... idade: 21, ... materias: ['Riak','Python'] ... })
  18. 18. Contando documentos > db.alunos.count() 3
  19. 19. Contando apenas sexo feminino > db.alunos.count({sexo:'feminino'}) 2 >
  20. 20. Listando apenas quem é do sexo feminino > db.alunos.find({sexo:'feminino'}) { "_id" : ObjectId("5230ee7ec3141857756a81a8"), "nome" : "Carolina", "sobrenome" : "Ferreira", "sexo" : "feminino", "idade" : 29, "email" : "carol@yahoo.com", "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" ] }
  21. 21. 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" : "carol@yahoo.com", "materias" : [ "MongoDB", "Riak", "Java" ], "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 } } >
  22. 22. 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" : "carol@yahoo.com", "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" ] } >
  23. 23. Alguns operadores de consulta Operador Descrição $gt Maior que $gte Maior ou igual que $lt Menor que $lte Menor ou igual que
  24. 24. Updates A Carolina casou e precisa mudar seu sobrenome, como fazer?
  25. 25. Atualização campo já existente em documento > db.alunos.update({'nome':'Carolina'}, {$set: {'sobrenome':'Ferreira Martins'}})
  26. 26. Vamos ver como ficou... > db.alunos.find({'nome':'Carolina'}).pretty() { "_id" : ObjectId("522f2b998434c181910716ee"), "email" : "carol@yahoo.com", "idade" : 29, "materias" : [ "MongoDB", "Riak", "Java" ], "nome" : "Carolina", "notas" : { "MongoDB" : 10, "Riak" : 8, "Java" : 9 }, "sexo" : "feminino", "sobrenome" : "Ferreira Martins" } >
  27. 27. O que acontece se fizer isso? > db.alunos.update({'nome':'Carolina'}, {'sobrenome':'Ferreira Martins'})
  28. 28. Removendo registros db.alunos.remove({'sobrenome':'Ferreira Martins'})
  29. 29. Adicionando a Carolina novamente http://pastebin.com/x38NFgu1
  30. 30. 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...
  31. 31. Sem o ObjectID > db.alunos.find({},{'nome':true, '_id': false}) { "nome" : "Christiano" } { "nome" : "Juliana" } { "nome" : "Carolina" }
  32. 32. Ordenação – A até Z > db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: 1}) { "nome" : "Carolina" } { "nome" : "Christiano" } { "nome" : "Juliana" }
  33. 33. Ordenação inversa – Z até A > db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: -1}) { "nome" : "Juliana" } { "nome" : "Christiano" } { "nome" : "Carolina" } >
  34. 34. 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 } >
  35. 35. Como descobrir quem não tem o campo email no documento? > db.alunos.find({'email': {$exists: false} })
  36. 36. Adicionando um campo em todos os documentos Como adicionar um campo tipo bool (True, False) em todos os registros?
  37. 37. Veja bem.... Query > db.alunos.update({ }, { $set: { 'aprovado': true } }, { multi: true }) O que adicionar Grava a alteração em todos Os registros que atendem Ao critério
  38. 38. Trabalhando com documentos embarcados (Join) > db.materias.insert( { 'titulo':'MongoDB','alunos': [ ] } )
  39. 39. Referenciando ao ObjectID da Carolina > db.materias.update( { 'titulo':'MongoDB' },{ $addToSet: { 'alunos':ObjectId("522f2b998434c181910716ee") } } )
  40. 40. Referenciando ao ObjectID do Christiano > db.materias.update({'titulo':'MongoDB'},{$addToSet: {'alunos':ObjectId("522f22b08434c181910716eb")}})
  41. 41. Resultado > db.materias.find().pretty() { "_id" : ObjectId("522f52b3fc53342aee8297f6"), "alunos" : [ ObjectId("522f2b998434c181910716ee"), ObjectId("522f22b08434c181910716eb") ], "titulo" : "MongoDB" }
  42. 42. Parte II Python e MongoDB
  43. 43. Instalando Virtualenv aptitude install python-virtualenv
  44. 44. Habilitando virtualenv virtualenv pymongo
  45. 45. Iniciando virtualenv source pymongo/bin/activate (pymongo)anderson@endor:~$
  46. 46. Instalando o PyMongo via PIP pip install pymongo
  47. 47. Testando a conexão (pymongo)anderson@endor:~$ python Python 2.7.3 (default, Jan 2 2013, 13:56:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
  48. 48. Listando os nomes dos alunos (pymongo)anderson@endor:~$ python Python 2.7.3 (default, Jan 2 2013, 13:56:14) [GCC 4.7.2] on linux2 Type "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'] ... Christiano Carolina Carlos >>>
  49. 49. christiano@christiano.me

×