A Python Object-Document-Mapper for working with MongoDB http://mongoengine.org
Find a file
Vincent Driessen 86233bcdf5 Added initial implementation of cascading document deletion.
The current implementation is still very basic and needs some polish.
The essence of it is that each Document gets a new meta attribute called
"delete_rules" that is a dictionary containing (documentclass,
fieldname) as key and the actual delete rule as a value.  (Possible
values are DO_NOTHING, NULLIFY, CASCADE and DENY.  Of those, only
CASCADE is currently implented.)
2010-12-05 22:24:27 -08:00
docs Fixed a couple of errors in the docs 2010-10-19 12:28:34 +01:00
mongoengine Added initial implementation of cascading document deletion. 2010-12-05 22:24:27 -08:00
tests Added initial implementation of cascading document deletion. 2010-12-05 22:24:27 -08:00
.gitignore Added *.egg to .gitignore. 2010-08-30 14:56:18 +02:00
AUTHORS Added self to AUTHORS 2010-10-18 01:30:32 +01:00
LICENSE Version bump to 0.1 beta 2010-01-02 21:34:48 +00:00
MANIFEST.in Bump to v0.3 2010-03-17 16:50:13 +00:00
README.rst Bump to v0.3 2010-03-17 16:50:13 +00:00
setup.py Added BooleanField 2010-01-05 18:17:44 +00:00

===========
MongoEngine
===========
:Info: MongoEngine is an ORM-like layer on top of PyMongo.
:Author: Harry Marr (http://github.com/hmarr)

About
=====
MongoEngine is a Python Object-Document Mapper for working with MongoDB. 
Documentation available at http://hmarr.com/mongoengine/ - there is currently 
a `tutorial <http://hmarr.com/mongoengine/tutorial.html>`_, a `user guide 
<http://hmarr.com/mongoengine/userguide.html>`_ and an `API reference
<http://hmarr.com/mongoengine/apireference.html>`_.

Installation
============
If you have `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_
you can use ``easy_install -U mongoengine``. Otherwise, you can download the
source from `GitHub <http://github.com/hmarr/mongoengine>`_ and run ``python
setup.py install``.

Dependencies
============
- pymongo 1.1+
- sphinx (optional - for documentation generation)

Examples
========
Some simple examples of what MongoEngine code looks like::

    class BlogPost(Document):
        title = StringField(required=True, max_length=200)
        posted = DateTimeField(default=datetime.datetime.now)
        tags = ListField(StringField(max_length=50))

    class TextPost(BlogPost):
        content = StringField(required=True)

    class LinkPost(BlogPost):
        url = StringField(required=True)

    # Create a text-based post
    >>> post1 = TextPost(title='Using MongoEngine', content='See the tutorial')
    >>> post1.tags = ['mongodb', 'mongoengine']
    >>> post1.save()

    # Create a link-based post
    >>> post2 = LinkPost(title='MongoEngine Docs', url='hmarr.com/mongoengine')
    >>> post2.tags = ['mongoengine', 'documentation']
    >>> post2.save()

    # Iterate over all posts using the BlogPost superclass
    >>> for post in BlogPost.objects:
    ...     print '===', post.title, '==='
    ...     if isinstance(post, TextPost):
    ...         print post.content
    ...     elif isinstance(post, LinkPost):
    ...         print 'Link:', post.url
    ...     print
    ...
    === Using MongoEngine ===
    See the tutorial

    === MongoEngine Docs ===
    Link: hmarr.com/mongoengine

    >>> len(BlogPost.objects)
    2
    >>> len(HtmlPost.objects)
    1
    >>> len(LinkPost.objects)
    1

    # Find tagged posts
    >>> len(BlogPost.objects(tags='mongoengine'))
    2
    >>> len(BlogPost.objects(tags='mongodb'))
    1

Tests
=====
To run the test suite, ensure you are running a local instance of MongoDB on
the standard port, and run ``python setup.py test``.

Community
=========
- `MongoEngine Users mailing list 
  <http://groups.google.com/group/mongoengine-users>`_
- `MongoEngine Developers mailing list 
  <http://groups.google.com/group/mongoengine-dev>`_
- `#mongoengine IRC channel <irc://irc.freenode.net/mongoengine>`_

Contributing
============
The source is available on `GitHub <http://github.com/hmarr/mongoengine>`_ - to
contribute to the project, fork it on GitHub and send a pull request, all
contributions and suggestions are welcome!