Skip to content
This repository

A Python Object-Document-Mapper for working with MongoDB

This branch is 8 commits ahead and 0 commits behind master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 docs
Octocat-spinner-32 mongoengine
Octocat-spinner-32 tests
Octocat-spinner-32 .gitignore Fixed db_field load error June 18, 2012
Octocat-spinner-32 .travis.yml Updated travis.yml September 19, 2012
Octocat-spinner-32 AUTHORS Added Garry Polley to contributors list October 01, 2012
Octocat-spinner-32 CONTRIBUTING.rst Updates to the readme September 27, 2012
Octocat-spinner-32 LICENSE Updated License August 01, 2012
Octocat-spinner-32 Bump to v0.3 March 17, 2010
Octocat-spinner-32 README.rst Updates to the readme September 27, 2012
Octocat-spinner-32 Updated benchmark stats August 17, 2012
Octocat-spinner-32 python-mongoengine.spec Fix ReferenceField dbref = False September 18, 2012
Octocat-spinner-32 requirements.txt Added for read the docs March 05, 2012
Octocat-spinner-32 setup.cfg Cleaned up the metaclasses for documents August 17, 2012
Octocat-spinner-32 Updated September 04, 2012


Info: MongoEngine is an ORM-like layer on top of PyMongo.
Author: Harry Marr (
Maintainer: Ross Lawley (


MongoEngine is a Python Object-Document Mapper for working with MongoDB. Documentation available at - 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 install.


  • pymongo 2.1.1+
  • sphinx (optional - for documentation generation)


Some simple examples of what MongoEngine code looks like:

class BlogPost(Document):
    title = StringField(required=True, max_length=200)
    posted = DateTimeField(
    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']

# Create a link-based post
>>> post2 = LinkPost(title='MongoEngine Docs', url='')
>>> post2.tags = ['mongoengine', 'documentation']

# 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

>>> len(BlogPost.objects)
>>> len(HtmlPost.objects)
>>> len(LinkPost.objects)

# Find tagged posts
>>> len(BlogPost.objects(tags='mongoengine'))
>>> len(BlogPost.objects(tags='mongodb'))


To run the test suite, ensure you are running a local instance of MongoDB on the standard port, and run: python test.



We welcome contributions! see the`Contribution guidelines <>`_

Something went wrong with that request. Please try again.