3. RDBMS vs MongoDB
RDBMS MongoDB
data DB + Driver DB + PyMongo
aggregation
constraints Application
validation
cascade updates
business logic Application
4. RDBMS vs MongoDB
RDBMS MongoDB
data DB + Driver DB + PyMongo
aggregation
constraints MongoEngine
validation
cascade updates
business logic Application Application
5. How it looks
MongoEngine class CharacterName(EmbeddedDocument):
first = StringField()
last = StringField()
class Character(Document):
name = EmbeddedDocumentField(CharacterName)
rating = IntField()
MongoDB {
"_id" : ObjectId
("5125e0ee98764119e77d9b1f"),
"_types" : ["Character"],
"rating" : 42,
"name" : {"_types" : ["CharacterName"],
"last": "Connor", "_cls": "CharacterName",
"first": "Sarah"},
"_cls": "Character"
}
6. How it looks
(MongoEngine 0.8)
MongoEngine class CharacterName(EmbeddedDocument):
first = StringField()
last = StringField()
class Character(Document):
name = EmbeddedDocumentField(CharacterName)
rating = IntField()
MongoDB {
"_id" : ObjectId
("5125e0ee98764119e77d9b1f"),
"rating" : 42,
"name" : {"last": "Connor",
"_cls": "CharacterName", "first": "Sarah"},
"_cls": "Character"
}
14. Django integration
Out of the box
● authentication backend
● session engine
● GridFSStorage
Third party
● stephrdev/django-mongoforms (Model Forms port)
● wpjunior/django-mongotools (forms, generic views)
● lig/django-registration-me (django-registration port)
15. Customizing things
(added today. sorry:)
● SequenceField(value_decorator=func)
● StringField(regex=r'…')
● URLField(verify_exists=True)
● …
● Inherit from standard Field classes
● Write your own Field classes
● Inherit from BaseDocument class,
don't forget metaclass!
● Any metamagic your like…
16. Questions?
Serge Matveenko (github.com/lig)
mongoengine.org
www.mongodb.org
Thanks to
Ross Lawley (github.com/rozza)
Elena Voronina :)