Skip to content

billyellow/monguo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Monguo

https://github.com/shiyanhui/monguo/blob/master/doc/source/_static/monguo.jpg?raw=true

Info:Monguo is a full-featured, asynchronous MongoDB ORM with Motor dirver for Tornado applications.
Author:Lime YH.Shi
https://travis-ci.org/shiyanhui/monguo.png https://pypip.in/v/monguo/badge.png https://pypip.in/d/monguo/badge.png

About

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

Issues / Questions / Feedback

You can open an issue on GitHub or email me directly at [email protected] if you have any question or feedback.

Installation

$ pip install git+https://github.com/mongodb/motor.git
$ pip install monguo

Dependencies

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+ (temporarily)
  • Motor 0.1+ (temporarily)

Additional dependencies are:

  • (to generate documentation) sphinx

Examples

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
Connection.connect('test')

# insert
bob_id = yield UserDocument.insert({
    'name': 'Bob',
    'email': '[email protected]',
    'age': 19
})

alice_id = yield UserDocument.insert({
    'name': 'Alice',
    'email': '[email protected]',
    'sex': 'female',
    'age': 18
})

post_id = yield PostDocument.insert({
    'author': DBRef(UserDocument.meta['collection'], bob_id),
    'publish_time': datetime.now(),
    '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()

Documentation

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

About

Asynchronous MongoDB ORM for Tornado

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 91.4%
  • Shell 8.6%