skip to navigation
skip to content

monguo 0.2.2

Asynchronous MongoDB ORM for Tornado

Info:Monguo is a full-featured, asynchronous MongoDB ORM with Motor dirver for Tornado applications.
Author:Lime YH.Shi


Monguo is an asynchronous MongoDB ORM based on driver Motor. The source is on GitHub and the docs are on ReadTheDocs.


$ pip install git+
$ pip install monguo


Monguo works in all the environments officially supported by Tornado and Motor. It requires:

  • Unix, including Mac OS X. Microsoft Windows is not officially supported.
  • Tornado 3.0+
  • Motor 0.2+


class UserDocument(Document):
    name  = StringField(required=True, unique=True, max_length=20)
    email = EmailField(required=True)
    age   = IntegerField()
    sex   = StringField(required=True, default='male',
                                       candidate=['male', 'female'])
    meta = {
        'collection': 'user'

    def get_user_list(skip=10, limit=5):
        result = yield UserDocument.find().to_list(limit)
        raise gen.Return(result)

class CommentDocument(EmbeddedDocument):
    commentor = ReferenceField(UserDocument, required=True)
    contents  = StringField(required=True, max_length=200)

class PostDocument(Document):
    author       = ReferenceField(UserDocument, required=True)
    publish_time = DateTimeField(required=True)
    title        = StringField(required=True, max_length=100)
    contents     = StringField(max_length=5000)
    comments     = ListField(EmbeddedDocumentField(CommentDocument))

    meta = {
        'collection': 'post'

# connect to database

# insert
bob_id = yield UserDocument.insert({
    'name': 'Bob',
    'email': '',
    'age': 19

alice_id = yield UserDocument.insert({
    'name': 'Alice',
    'email': '',
    'sex': 'female',
    'age': 18

post_id = yield PostDocument.insert({
    'author': DBRef(UserDocument.meta['collection'], bob_id),
    'title': 'title',

# update
comment = {
    'commentor': DBRef(UserDocument.meta['collection'], alice_id),
    'contents': 'I am comments.'
yield PostDocument.update({'_id': post_id},
                          {'$push': {'comments': comment}})

# query
user = yield UserDocument.find_one({'name': 'Bob'})
posts = yield PostDocument.find().to_list(5)

# higher API
user_list = yield UserDocument.get_user_list()


You will need sphinx installed to generate the documentation. Documentation can be generated by running python doc. Generated documentation can be found in doc/build/html/. You can read the current docs at ReadTheDocs.

File Type Py Version Uploaded on Size
monguo-0.2.2.tar.gz (md5) Source 2014-06-14 14KB