More Related Content Similar to Desenvolvendo com mongodb Similar to Desenvolvendo com mongodb (20) More from Thiago Avelino (13) Desenvolvendo com mongodb2. QUEM SOU EU?
• Thiago Avelino
• Socio da empresa Trianguli Consultoria Web
• Desenvolvedor Python
• Gerente de Projeto
• Commiter em alguns projetos
• MongoDB
• MongoEngine
• CentOS (Kernel)
4. PRÓS MONGODB
• Tipagem dinâmica
• Migrações
• Flexibilidade
• Cache
• BSON
7. DOCUMENTO
O documento do MongoDB é criado a partir de um JSON.
Exemplo:
{
nome: ‘Thiago Avelino’,
liguagem: ‘Python’,
database: ‘MongoDB’
}
9. MIGRAÇÃO
Atualizando a estrutura de dados dinamicamente
{
nome: ‘Thiago Avelino’,
liguagem: ‘Python’,
database: ‘MongoDB’
}
{
nome: ‘Thiago Avelino’,
liguagem: [‘Python’, ‘Go’, ‘C’, ‘C++’, ‘Ruby’],
database: [‘MongoDB’, ‘PostgreSQL’, ‘MySQL’]
}
10. AGREGADOR
Distintos
> db.tdc2011.insert({linguagem: ‘Python’})
> db.tdc2011.insert({linguagem: ‘C’})
> db.tdc2011.insert({linguagem: ‘C++’})
> db.tdc2011.insert({linguagem: ‘Ruby’})
> db.tdc2011.distinct(‘linguagem’)
[ "python", "c", "c++" ]
12. MAP-REDUCE
Operações destinadas a manipulação grande conjuntos de informações
function () {
this.linguagem.forEach(function(z) {
emit(z, 1);
});
}
function (key, values) {
var total = 0;
for (var i = 0; i < values.length; i++) {
total += values[i];
}
return total;
}
15. PYTHON
Exemplo
>>> from pymongo import Connection
>>> con = Connection
>>> db = con[‘tdc2011’]
>>>
>>> tdc = {nome: ‘Thiago Avelino’,
liguagem: [‘Python’, ‘Go’, ‘C’, ‘C++’, ‘Ruby’],
database: [‘MongoDB’, ‘PostgreSQL’, ‘MySQL’]}
>>> db.tdc2011.insert(tdc)
ObjectId(‘4d2e48e7cc9374271b02247a’)
>>>
>>> db.tdc2011.find_one({})
>>> {u‘_id’: ObjectId(‘4d2e48e7cc9374271b02247a’),u‘nome’: u‘Thiago
Avelino’, u‘linguagem’: [u‘Python’,u’c’,u’c++’], u’database’: [‘MongoDB’,
‘PostgreSQL’, ‘MySQL’]}
17. PYTHON ORM
Montando models com MongoEngine
class Cadastro(Document):
nome = StringField(required = True, max_length = 200)
twitter = StringField(max_length = 25)
class Caracteristicas(Cadastro):
linguagem = ListField(StringField(max_length = 50))
database = ListField(StringField(max_length = 50))
18. PYTHON ORM
Fazendo insert com MongoEngine
>>> add1 = Cadastro(nome = ‘Thiago Avelino’, twitter = ‘avelino0’)
>>> add1.linguagem = [‘Python’, ‘C’, ‘C++’, ‘Ruby’]
>>> add1.database = [‘MongoDB’, ‘PostgreSQL’, ‘MySQL’]
>>> add1.save()
>>> add2 = Cadastro(nome = ‘Lerolero’)
>>> add2.linguagem = [‘Ruby’]
>>> add2.database = [‘PostgreSQL’]
>>> add2.save()
19. PYTHON ORM
Buscando informações via Objeto
>>> for cad in Cadastro.objects:
... print cad.nome
... if isinstance(cad, Caracteristicas):
... print ‘Twitter: @%s’ % cad.twitter
... print ‘====’
...
Thiago Avelino
Twitter: @avelino0
====
Lerolero
====
20. PYTHON ORM
Buscando informações via Objeto em lista
>>> len(Caracteristicas.objects(database = ‘mongodb’))
1
>>> len(Caracteristicas.objects(database = ‘PostgreSQL’))
2
21. PYTHON ORM
GridFS
class Img(Document):
nome = StringField(required = True, max_length = 50)
photo = FileField()
>>> i = Img(nome = ‘Python’)
>>> photo_py = open(‘python.png’, ‘r’)
>>> i.photo = photo_py
>>> i.photo.content_type = ‘image/png’
>>> i.save()
>>> i = Img.object(nome = ‘Python’).first()
>>> photo = i.photo.read()
>>> content_type = i.photo.content_type
24. RUBY
Exemplo
require ‘rubygems’
require ‘mongo’
coll = Mongo::Connection.new.db(‘tdc2011’)
doc = {‘nome’ => ‘Avelino’, ‘linguagem’ => ‘Ruby’}
coll.insert(doc)
doc[‘nome’] = ‘Thiago Avelino’
coll.update({‘_id’ => doc[‘_id’]}, doc)
coll.find({‘linguagem’ => ‘Ruby’})
25. RUBY MONGOMAPPER
Exemplo
class Cadastro
include MongoMapper::Document
key :nome, String
key :linguagem, String
end
cad = Cadastro.new(:nome => ‘Thiago Avelino’, :linguagem => ‘Ruby’)
cad.save!
Cadastro.where(:linguagem => ‘Ruby’).first
26. RUBY ORM
• MongoID
• MongoMapper
• MongoODM (Brasileiro)
• ...
Editor's Notes \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n