SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Introdução ao MongoDB 
Christiano Anderson 
http://christiano.me 
Twitter: @dump 
E-mail: chris@christiano.me
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”
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
Instalação 
● A forma mais fácil é usar o gerenciador de 
pacotes da sua própria distribuição. 
http://bit.ly/mongo_no_debian
MongoDB Shell 
$ mongo
MongoDB Shell 
● Roda engine JavaScript; 
● Permite manipular todo o banco de dados; 
● Permite criar funções; 
● Ler arquivos externos; 
● Realizar comandos administrativos;
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
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 
>
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;
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
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
Listando as coleções 
> show collections 
alunos 
system.indexes 
>
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" ] } 
>
Pretty 
> db.alunos.find({}).pretty() 
{ 
"_id" : ObjectId("522f22b08434c181910716eb"), 
"nome" : "Christiano", 
"sobrenome" : "Anderson", 
"sexo" : "masculino", 
"idade" : 33, 
"materias" : [ 
"MongoDB", 
"Python", 
"Lógica de Programação" 
] 
} 
>
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
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 
} 
} 
>
Inserindo mais um documento 
> db.alunos.insert({ 
... nome: 'Juliana', 
... sobrenome: 'Silva', 
... sexo: 'feminino', 
... idade: 21, 
... materias: ['Riak','Python'] 
... })
Contando documentos 
> db.alunos.count() 
3
Contando apenas sexo feminino 
> db.alunos.count({sexo:'feminino'}) 
2 
>
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" ] }
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 } } 
>
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" ] } 
>
Alguns operadores de consulta 
Operador Descrição 
$gt Maior que 
$gte Maior ou igual que 
$lt Menor que 
$lte Menor ou igual que
Updates 
A Carolina casou e precisa mudar seu 
sobrenome, como fazer?
Atualização campo já existente em 
documento 
> db.alunos.update({'nome':'Carolina'}, {$set: 
{'sobrenome':'Ferreira Martins'}})
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" 
} 
>
O que acontece se fizer isso? 
> db.alunos.update({'nome':'Carolina'}, 
{'sobrenome':'Ferreira Martins'})
Removendo registros 
db.alunos.remove({'sobrenome':'Ferreira Martins'})
Adicionando a Carolina novamente 
http://pastebin.com/x38NFgu1
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...
Sem o ObjectID 
> db.alunos.find({},{'nome':true, '_id': false}) 
{ "nome" : "Christiano" } 
{ "nome" : "Juliana" } 
{ "nome" : "Carolina" }
Ordenação – A até Z 
> db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: 1}) 
{ "nome" : "Carolina" } 
{ "nome" : "Christiano" } 
{ "nome" : "Juliana" }
Ordenação inversa – Z até A 
> db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: -1}) 
{ "nome" : "Juliana" } 
{ "nome" : "Christiano" } 
{ "nome" : "Carolina" } 
>
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 } 
>
Como descobrir quem não tem o 
campo email no documento? 
> db.alunos.find({'email': {$exists: false} })
Adicionando um campo em todos os 
documentos 
Como adicionar um campo tipo bool (True, 
False) em todos os registros?
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
Trabalhando com documentos 
embarcados (Join) 
> db.materias.insert( { 'titulo':'MongoDB','alunos': [ ] } )
Referenciando ao ObjectID da 
Carolina 
> db.materias.update( { 'titulo':'MongoDB' },{ $addToSet: 
{ 'alunos':ObjectId("522f2b998434c181910716ee") } } )
Referenciando ao ObjectID do 
Christiano 
> db.materias.update({'titulo':'MongoDB'},{$addToSet: 
{'alunos':ObjectId("522f22b08434c181910716eb")}})
Resultado 
> db.materias.find().pretty() 
{ 
"_id" : ObjectId("522f52b3fc53342aee8297f6"), 
"alunos" : [ 
ObjectId("522f2b998434c181910716ee"), 
ObjectId("522f22b08434c181910716eb") 
], 
"titulo" : "MongoDB" 
}
Parte II 
Python e MongoDB
Instalando Virtualenv 
aptitude install python-virtualenv
Habilitando virtualenv 
virtualenv pymongo
Iniciando virtualenv 
source pymongo/bin/activate 
(pymongo)anderson@endor:~$
Instalando o PyMongo via PIP 
pip install pymongo
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. 
>>>
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 
>>>
christiano@christiano.me

Weitere ähnliche Inhalte

Was ist angesagt?

MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBDouglas Lira
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Fernando Boaglio
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
Elasticsearch como gerenciar seus logs com logstash e kibana
Elasticsearch   como gerenciar seus logs com logstash e kibanaElasticsearch   como gerenciar seus logs com logstash e kibana
Elasticsearch como gerenciar seus logs com logstash e kibanaLuiz Henrique Zambom Santana
 
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...ISCTE-IUL ACM Student Chapter
 

Was ist angesagt? (20)

MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDB
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
Elasticsearch como gerenciar seus logs com logstash e kibana
Elasticsearch   como gerenciar seus logs com logstash e kibanaElasticsearch   como gerenciar seus logs com logstash e kibana
Elasticsearch como gerenciar seus logs com logstash e kibana
 
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
 

Ähnlich wie Minicurso Introdução ao mongoDB SCTI

Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodbThiago Avelino
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesDerek Willian Stavis
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
PyMongo = Python + MongoDB
PyMongo = Python + MongoDBPyMongo = Python + MongoDB
PyMongo = Python + MongoDBBrunno Gomes
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
Programando em python dicionarios
Programando em python   dicionariosProgramando em python   dicionarios
Programando em python dicionariossamuelthiago
 
Mongo DB de forma simples e rápida
Mongo DB de forma simples e rápida Mongo DB de forma simples e rápida
Mongo DB de forma simples e rápida Erivan Cledson
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBRodrigo Hjort
 

Ähnlich wie Minicurso Introdução ao mongoDB SCTI (20)

Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
PyMongo = Python + MongoDB
PyMongo = Python + MongoDBPyMongo = Python + MongoDB
PyMongo = Python + MongoDB
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Programando em python dicionarios
Programando em python   dicionariosProgramando em python   dicionarios
Programando em python dicionarios
 
Mongo DB de forma simples e rápida
Mongo DB de forma simples e rápida Mongo DB de forma simples e rápida
Mongo DB de forma simples e rápida
 
Mongo db
Mongo dbMongo db
Mongo db
 
JQuery
JQuery JQuery
JQuery
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 

Minicurso Introdução ao mongoDB SCTI

  • 1. Introdução ao MongoDB Christiano Anderson http://christiano.me Twitter: @dump E-mail: chris@christiano.me
  • 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. 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. Instalação ● A forma mais fácil é usar o gerenciador de pacotes da sua própria distribuição. http://bit.ly/mongo_no_debian
  • 6. MongoDB Shell ● Roda engine JavaScript; ● Permite manipular todo o banco de dados; ● Permite criar funções; ● Ler arquivos externos; ● Realizar comandos administrativos;
  • 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. 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. 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. 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. 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. Listando as coleções > show collections alunos system.indexes >
  • 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. 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. 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. 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. Inserindo mais um documento > db.alunos.insert({ ... nome: 'Juliana', ... sobrenome: 'Silva', ... sexo: 'feminino', ... idade: 21, ... materias: ['Riak','Python'] ... })
  • 18. Contando documentos > db.alunos.count() 3
  • 19. Contando apenas sexo feminino > db.alunos.count({sexo:'feminino'}) 2 >
  • 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. 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. 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. Alguns operadores de consulta Operador Descrição $gt Maior que $gte Maior ou igual que $lt Menor que $lte Menor ou igual que
  • 24. Updates A Carolina casou e precisa mudar seu sobrenome, como fazer?
  • 25. Atualização campo já existente em documento > db.alunos.update({'nome':'Carolina'}, {$set: {'sobrenome':'Ferreira Martins'}})
  • 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. O que acontece se fizer isso? > db.alunos.update({'nome':'Carolina'}, {'sobrenome':'Ferreira Martins'})
  • 29. Adicionando a Carolina novamente http://pastebin.com/x38NFgu1
  • 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. Sem o ObjectID > db.alunos.find({},{'nome':true, '_id': false}) { "nome" : "Christiano" } { "nome" : "Juliana" } { "nome" : "Carolina" }
  • 32. Ordenação – A até Z > db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: 1}) { "nome" : "Carolina" } { "nome" : "Christiano" } { "nome" : "Juliana" }
  • 33. Ordenação inversa – Z até A > db.alunos.find({}, {'nome': true, '_id': false}).sort({nome: -1}) { "nome" : "Juliana" } { "nome" : "Christiano" } { "nome" : "Carolina" } >
  • 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. Como descobrir quem não tem o campo email no documento? > db.alunos.find({'email': {$exists: false} })
  • 36. Adicionando um campo em todos os documentos Como adicionar um campo tipo bool (True, False) em todos os registros?
  • 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. Trabalhando com documentos embarcados (Join) > db.materias.insert( { 'titulo':'MongoDB','alunos': [ ] } )
  • 39. Referenciando ao ObjectID da Carolina > db.materias.update( { 'titulo':'MongoDB' },{ $addToSet: { 'alunos':ObjectId("522f2b998434c181910716ee") } } )
  • 40. Referenciando ao ObjectID do Christiano > db.materias.update({'titulo':'MongoDB'},{$addToSet: {'alunos':ObjectId("522f22b08434c181910716eb")}})
  • 41. Resultado > db.materias.find().pretty() { "_id" : ObjectId("522f52b3fc53342aee8297f6"), "alunos" : [ ObjectId("522f2b998434c181910716ee"), ObjectId("522f22b08434c181910716eb") ], "titulo" : "MongoDB" }
  • 42. Parte II Python e MongoDB
  • 43. Instalando Virtualenv aptitude install python-virtualenv
  • 45. Iniciando virtualenv source pymongo/bin/activate (pymongo)anderson@endor:~$
  • 46. Instalando o PyMongo via PIP pip install pymongo
  • 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. 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 >>>