- Info
MongoEngine is an ORM-like layer on top of PyMongo.
- Repository
- Author
Harry Marr (http://github.com/hmarr)
- Maintainer
Ross Lawley (http://github.com/rozza)
MongoEngine is a Python Object-Document Mapper for working with MongoDB. Documentation available at http://mongoengine-odm.rtfd.org - there is currently a tutorial, a user guide and an API reference.
If you have setuptools you can use easy_install -U mongoengine
. Otherwise, you can download the source from GitHub and run python setup.py install
.
- pymongo 2.1.1+
- sphinx (optional - for documentation generation)
Some simple examples of what MongoEngine code looks like:
Switch database option:
class User(Document):
email = StringField(required=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
meta = {'collection': 'users', 'allow_inheritance': False, '_target_db': 'some_target_database'}
# create a user instance
user = User()
# switch database to company_users
user.switch_db('company_users')
user.email = 'ted@companyusers.com'
user.first_name = 'Ted'
user.last_name = 'Mosby'
user.save()
user = User()
# switch database to goliath_users!
user.switch_db('goliath_users')
user.email = 'barney@coolshark.com'
user.first_name = 'Barney'
user.last_name = 'Stinson'
user.save()
# Each user saved to different databases
Regular usage :
class BlogPost(Document):
title = StringField(required=True, max_length=200)
posted = DateTimeField(default=datetime.datetime.now)
tags = ListField(StringField(max_length=50))
class TextPost(BlogPost):
content = StringField(required=True)
class LinkPost(BlogPost):
url = StringField(required=True)
# Create a text-based post
>>> post1 = TextPost(title='Using MongoEngine', content='See the tutorial')
>>> post1.tags = ['mongodb', 'mongoengine']
>>> post1.save()
# Create a link-based post
>>> post2 = LinkPost(title='MongoEngine Docs', url='hmarr.com/mongoengine')
>>> post2.tags = ['mongoengine', 'documentation']
>>> post2.save()
# Iterate over all posts using the BlogPost superclass
>>> for post in BlogPost.objects:
... print '===', post.title, '==='
... if isinstance(post, TextPost):
... print post.content
... elif isinstance(post, LinkPost):
... print 'Link:', post.url
... print
...
=== Using MongoEngine ===
See the tutorial
=== MongoEngine Docs ===
Link: hmarr.com/mongoengine
>>> len(BlogPost.objects)
2
>>> len(HtmlPost.objects)
1
>>> len(LinkPost.objects)
1
# Find tagged posts
>>> len(BlogPost.objects(tags='mongoengine'))
2
>>> len(BlogPost.objects(tags='mongodb'))
1
To run the test suite, ensure you are running a local instance of MongoDB on the standard port, and run python setup.py test
.
- MongoEngine Users mailing list
- MongoEngine Developers mailing list
- #mongoengine IRC channel
The source is available on GitHub - to contribute to the project, fork it on GitHub and send a pull request, all contributions and suggestions are welcome!