2. Example usageΒΆ

We don’t assume you are stupid, here we go

Model definition:

from mongu import Client, Model

c = Client()                              # connect to MongoDB

@c.register_model
class User(Model):
    _database_   = 'test'                 # database name
    _collection_ = 'users'                # collection name
    _defaults_ = {'is_activated': False}  # default attribute (callable value is supported)

    def activate(self):                   # a custom method
        self.is_activated = True

Basic manipulation

The model is a dict:

>> user = User(username='Mongu')
>> user
User({'username': 'Mongu', 'is_activated': False})
>> 'username' in user
True

With your methods:

>> user.activate()

That work:

>> user
User({'username': 'Mongu', 'is_activated': True})
>> user.save()
>> user
User({'username': 'Mongu', 'is_activated': True, '_id': ObjectId('534f81bd7246ef6955d2388f')})

ObjectId won’t be a pain:

>> repr(user._id)
"ObjectId('534f81bd7246ef6955d2388f')"
>> repr(user.id)
"534f81bd7246ef6955d2388f"

You can find by str or ObjectId, The following two lines get the same result:

>> User.by_id(user._id)
>> User.by_id(user.id)
User({u'username': u'Mongu', u'is_activated': True, u'_id': ObjectId('534f81bd7246ef6955d2388f')})

Query (It’s really just PyMongo)

Create some users:

>> for name in ('Mongu', 'Rocks'):
>>    User(username=name).save()
>> list(User.find())
[User({u'username': u'Mongu', u'is_activated': False, u'_id': ObjectId('534f87c27246ef95a3294c28')}),
 User({u'username': u'Rocks', u'is_activated': False, u'_id': ObjectId('534f87c27246ef95a3294c29')})]

It’s naked PyMongo, nothing hidden from you:

>> User.collection
Collection(Database(MongoClient('localhost', 27017), u'test'), u'users')

PyMongo raw query:

>> user_naked = User.collection.find_one({'username': 'Rocks'})

Use Mongu to dress up:

>> user_dressed = User.find_one({'username': 'Rocks'})

Differences:

>> user_dressed.activate()
>> user_naked.activate()  # this will raise an AttributeError

You konw Why:

>> type(user_naked)
<type 'dict'>
>> type(user_dressed)
<class '__main__.User'>