Info: | MongoEngine is an ORM-like layer on top of PyMongo. |
---|---|
Repository: | https://github.com/MongoEngine/mongoengine |
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 = '[email protected]' user.first_name = 'Ted' user.last_name = 'Mosby' user.save() user = User() # switch database to goliath_users! user.switch_db('goliath_users') user.email = '[email protected]' 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!