Minimal Python ODM for MongoDB
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs
examples
nanomongo
test
.gitignore
.travis.yml
CHANGELOG.md
LICENSE
README.rst
requirements-test.txt
requirements.txt
setup.cfg
setup.py

README.rst

nanomongo

https://travis-ci.org/eguven/nanomongo.png

nanomongo is a minimal MongoDB Object-Document Mapper for Python. It does not attempt to be a feature-complete ODM but if you enjoy using PyMongo API with dictionaries and often find yourself writing validators and pymongo.Collection wrappers, nanomongo might suit your needs.

Quick Links: Source (github) - Documentation (rtd) - Packages (PyPi) - Changelog

Quickstart

import pymongo
from nanomongo import Field, BaseDocument

client = pymongo.MongoClient()

# python3 notation, see documentation for python2 options
# we can omit the keyword arguments here and later call MyDoc.register(client=client, db='dbname')
class MyDoc(BaseDocument, dot_notation=True, client=client, db='dbname'):
    foo = Field(str)
    bar = Field(int, required=False)

    __indexes__ = [
        pymongo.IndexModel('foo'),
        pymongo.IndexModel([('bar', 1), ('foo', -1)], unique=True),
    ]

doc = MyDoc(foo='L33t')  # creates document {'foo': 'L33t'}
doc.insert()             # inserts document {'_id': ObjectId('...'), 'foo': 'L33t'}
doc.bar = 42             # records the change
doc.save()               # calls collection.update_one {'$set': {'bar': 42}}

MyDoc.find_one({'foo': 'L33t'})
{'_id': ObjectId('...'), 'bar': 42, 'foo': 'L33t'}
Author:Eren Güven (GitHub, Twitter)
License:Apache License 2.0