Skip to content
a python object mapper for mongodb (pymongo)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


MongoModels is an object mapper for pymongo.

Design Goals

* mongomodels tries to be **simple** and **pragmatic**
* tries not to get into developers way.

A quick example

basic crud

import pymongo
from mongomodels import connections, MongoModel, String, Integer, \
    Column, or_, and_, ValidationError, Boolean, belongs_to

client = pymongo.MongoClient()

class User(MongoModel):
    name =  Column(String, required=True)
    age = Column(Integer)

# now we can create a user
u = User() = "foobar"
u.age = 11

# update the instancce
u.age = 12

# now we can query the user
>>> User.query.filter_by(name="foobar").first()
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4359526096>
# or you can use filtering api like sqlalchemy's
>>> User.query.filter(User.age < 13).first()
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4359511888>
>>> User.query.filter(User.age == 12).first()
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4359511824>

# you can combine conditions with or_, and_ etc.
>>> User.query.filter(and_(User.age > 10, User.age <20)).first()
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4359542608>

# you can chain filters
>>> User.query.filter_by(name="foobar").filter(User.age > 10).filter(User.age < 13).first()
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4359572560>

# a query is an iterator
>>> for user in User.query.filter_by(name="foobar"):
...    print user
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4359572560>

# you can side step query interface and use pymongo/mongodb's criterias
>>> User.query.filter({'name':'foobar'}).all()
# also you can chain them
>>> User.query.filter({'name':{'$regex':'^foob'}}).filter(User.age > 10).filter(User.age < 13).first()
<User(age:12 _id:55490785c8bd0c19b76a4d1f name:foobar) object at  4344295568>

# delete the user
>>> u.delete()


We currently only have one-to-many relationship, and it works like this

class User(MongoModel):
    name = Column(String)

class Child(MongoModel):
    name = Column(String)

# belongs_to helper will install some magic to User model, like
u = User(name="user 1")
child = Child(name="child 1")

# you can get the first child of the user. as you can see user_id column is added magically.
>>> u.children.first()
<Child(_id:55490958c8bd0c1bf7eba089 user_id:55490958c8bd0c1bf7eba088 name:child 1) object at  4378765648>

# or you can add/combine some queries
>>> u.children.filter_by(name='child 1').first()
<Child(_id:55490a1dc8bd0c1d3bb92625 user_id:55490a1dc8bd0c1d3bb92624 name:child 1) object at  4396620880>

# Child class also gets a helper property
>>> child.user
<User(_id:55490a1dc8bd0c1d3bb92624 name:user 1) object at  4382514768>


for now you can install it with pip from github

pip install -U git+


This project is licensed with MIT

You can’t perform that action at this time.