Version 1.0.0

  • Added python 3 support (thanks to @aquavitae)
  • Big code clean up (thanks to @Winnetou)
  • Updated documentation
  • Added read the docs documentation
  • Improved documentation structure

Version 0.9.1

  • fixed #131 - Use PEP8 recommendation for import
  • fixed tests (thanks @JohnBrodie and @bneron)
  • Added a Makefile for running tests in venv (thanks to @gulbinas)
  • fixed pep8 error (thanks to @gulbinas)
  • added support for MongoReplicaSetClient (thanks to @inabhi9)
  • Added __getstate__ and __setstate__ to DotedDict and i18nDotedDict. Problems appeared here when pickling mongokit documents due to apparent lack of these functions. (thanks to @petersng)
  • Fixed english mistake and typos into the documentation (thanks to @biow0lf, @SeyZ, @gianpaj and @1123)
  • Fixed inherited queries when accessing cursor by index (thanks to @asivokon)
  • changed the namespace on schema document errors (thanks to @rtjoseph11)

Version 0.9.0

  • now MongoKit required PyMongo >= 2.5
  • find_and_modify returns None if the query fails (thanks to @a1gucis)
  • Fix off-by-one error on SchemaDocument (thanks to @John Brodie)
  • Fix inherited queries (issue #106) (thanks to @effem-git)
  • Fix for serialization of nested structures with type validation (thanks to @LK4D4)
  • Remove unnecessary path arguments in to_json._convert_to_python (thanks to @Alexandr Morozov)
  • big refactorization by using multiple inheritance for DRYness (thanks to @liyanchang)
  • Add find_fulltext method for convenience (thanks to @astronouth7303) (not official and not documented yet)
  • Allow text indexes in document definitions (thanks to @astronouth7303)
  • Adding replica set support (thanks to @liyanchang)
  • Fix typos on README (thanks to @girasquid)
  • add pagination helper (not yed documented)(thanks to @jarrodb)

Version 0.8.3

  • allow keyword arguments (like read_preferences, slave_okay, etc) to be set in Connection (thanks to Peter S Ng)
  • Add find_and_modify again. It was removed by an unexpected rollback.
  • use MongoClient with MasterSlaveConnection

Version 0.8.2

  • fix #101 - validators condition fix
  • fix #110 - support PyMongo >= 2.4 (import MongoClient) – thanks to @mattbodman and @zavatskiy
  • Fixed some spelling/grammar (thanks to @gekitsuu)

Version 0.8.1

  • support pymongo 2.3
  • small updates to validation messages (Merge pull request #94 from unpluggd/master)
  • Fixed typo when throwing MaxDocumentSizeError in validate() (thanks to Andy Pavlo)
  • added fix for unconditional access to __wrap on cursors (thanks to David T. Lehmann)
  • Add .travis.yml for Travis CI ( (Marc Abramowitz)
  • Fixed rendering issue in the docs. (thanks to Dougal Matthews)
  • tweaked the error messages in validation for missing and unknown fields to aid in debugging projects (thanks to Phillip B Oldham)

Version 0.8.0

  • Add spec file for rpm-based distributions (Merge pull request #63 from linuxnow/master)
  • change document size limitation for mongodb 1.8 or later. Thanks to Aleksey Sivokon (Merge pull request #74 from key/master)
  • validation of “” for an int (Merge pull request #79 from barnybug/master)
  • Fix exception when loading documents with a custom type field missing (Merge pull request #80 from barnybug/master)
  • Big documentation restructuration made by Sean Lynch (Merge pull request #82 from sean-lynch/master)
  • Using rename no longer causes migrations throw an exception (Merge pull request #86 from matthewh/master)
  • Some test is modified and added tox (Merge pull request #91 from aircastle/modifiytest)
  • Replace pymongo.objectid with bson.objectid (Merge pull request #88 from behackett/master)
  • Added Support for additional keyword-arguments for index-creation (Merge pull request #85 from mfelsche/master)
  • Remove anyjson dependency and use builtin json instead

Thank you all for all your patches !

Version 0.7.2

Version 0.7.1

  • change MongokitMasterSlaveConnection to MasterSlaveConnection for consistency
  • fix #57 – support pymongo > 1.9 in
  • fix #45 – remove automatic index creation
  • fix #43 – slicing a cursor should return a mongokit document, not dict
  • Don’t try to convert None struct to json (patch from @mLewisLogic thanks !)
  • fix schemaless issue (thanks to Mihai Pocorschi for reporting it)

Version 0.7

  • add use_schemaless feature ! please see the documentation for more information

  • Add equality test for mongokit operators (thanks to @allancaffee)

    This allows developers to write unit tests on the structure of their document classes when operators are used

  • roll back find_and_modify for master branch (need pymongo 1.10 for that)

  • many documentation fixes

  • fix #55 – Bug in VersionedDocument remove() method

  • fix #53 – Fixed a few spelling errors in README

  • fix #52 – Advanced bulk migration docs example is broken

  • fix #51 – pymongo.dbref is deprecated, use bson.dbref instead

  • fix #49 – Can’t specify default values for lists of embedded objects

  • fix #48 – uuid.UUID support

  • fix #41 – add basestring to authorized types

  • fix #40 – Made some enhancements

  • fix #39 – KeyError when saving partially loaded documents

  • fix #34 – add find_and_modify method to Document

  • fix #32 – allow the structure to be empty (was: document.to_json())

  • fix #24 – Don’t handle __database__/__collection__ attribute for virtual documents

Version 0.6

  • fix error when check is True. Thanks to @dasmith for the patch
  • Many english corrections in the documentation thanks to @allancaffee
  • spliting doc and refactoring documentation
  • remove unused MongoDocumentCursor


  • fix #26 – unable to install (debian lenny, py 2.5)
  • fix #25 – put the new url into the

Version 0.5.13

  • fix #21 – required_fields weird behavior with autorefs
  • fix #19 – ‘checked’ field not listed in ‘indexes’ section
  • fix #20 – creating index on fields not in structure + optimize index generation
  • fix #18 – typo in the doc
  • fix import. Dbref isn’t in pymongo package anymore
  • fix deprecation warning from pymongo’s from_dict
  • fix #8 – allow to access Document via the db


  • fix #17 – got an unexpected keyword argument ‘from_son’
  • fix #15 – typo in the doc

Version 0.5.12

  • allow register method to be a decorator (thanks to Christopher Grebs for the inspiration)
  • get ride of MongoDocumentCursor and use a subclass of pymongo’s Cursor instead
  • structure and descriptors validation is now done at object creation (not instantiation)
    • advantage : mongokit is 40% faster
    • beware : if you put a Document into a structure for reference, mongokit doesn’t check anymore if use_autorefs is set
  • add i18n descriptor validation + better i18n support
  • code cleaning

Version 0.5.11

  • support latest pymongo version
  • some changes in GridFS support (please read
  • Deprecate atomic_save feature
  • remove libmagic import from : to many trouble with this lib, we have to find another way to guess the content-type
  • fix #79 – Tries to migrate non-saved document
  • fix #70 – Set changes from set to list when a validation error occurs
  • add contributor + fix email address to prevent spam
  • fix deprecation warning of Python 2.6
  • fix issue with validation and migration
  • fix #75 – add “version” attribute to module

Version 0.5.10

  • fix bug in autorefs when reference in double list

Version 0.5.9

  • minors fixes

Version 0.5.8

  • add rewind to cursor
  • killed many bug in from_json()
  • fix #66 - local variable ‘l_objs’ referenced before assignment
  • fix #61 - Issue with indexing on multi-columns with directions

Version 0.5.7

  • fix #63 - Creating index for each document instance operation. Brings speed improvements
  • fix #60 - autorefs doesn’t work with complex structures
  • fix #62 - Dereference to model. Thanks to Christian Joudrey for the patch
  • fix #64 - error with atomic_save when using embed document
  • fix #65 - Lazy migrations with dict in list and documentation fix

Version 0.5.6

  • add atomic update (just save the document again)
  • add init_type to CustomType. This allow to fill an empty skeleton at instanciation
  • add debian package build rules. Thanks to Sebastien Estienne
  • add lazy migration and bulk migration support
  • fix a bug in CustomType
  • add ‘check’ option in indexes descriptor
  • add untyped field support
  • fix #58 - Document Validators not working for CustomType
  • improve DotCollapsedDict by adding reference structure

Version 0.5.5

  • fix 54 - Add reload method. Please read the documentation
  • put generate_index into Document.__init__. This is useful for instanciating Document like this : MyDoc(collection=mycol)
  • fix #44 - add set type support + add validate() method to CustomType
  • fix #52 - Custom validation error messages (thanks to @cjoudrey for the patch)
  • fix #50 - need optimizations in connection (won 20s on the benchmark)
  • fix #48 - Tuple assignment does not convert to list
  • fix 49 - KeyError when using deep nested autorefs

Version 0.5.4

  • A lot of features in GridFS with api change
  • fix bug in autorefs
  • fix #37 - find_random crash if no collection is empty
  • fix #38 - OverflowError in doc.to_json_type() when used over the datetime 2038
  • fix #41 - Warnings when setting attributes before enabling use_dot_notation
  • fix #40 - Better exception on bad structure. Thanks to peterbe for the patch
  • fix #43 - Add ability to collect errors in one place instead of throwing exceptions while validating
  • add _dot_notation_warning attribute. If false, disable all dot notation related warning
  • add patch to enable data load from map/reduce. See
  • fix bug spotted by Sebastien Estienne - error when using skip_validation with required_fields. Thanks
  • fix issue while using {unicode:unicode} in structure and i18n at the same time

Version 0.5.3

  • fix default_value issue when using with dict and list (see #35)
  • fix bug reported by Andrew Degtiariov :
  • add clone and explain method to MongoDocumentCursor
  • add distinct to cursor (thanks to Flaper87)
  • fix index test
  • fix : when a field is added to a saved document and not specified in the structure, the validation wasn’t work properly
  • use current database if DBRef has no database information. Please, see the doc
  • support of pymongo 1.4

Version 0.5.2

  • bugs fix in json import/export
  • bugs fix in default values and required values
  • gridfs support

Version 0.5.1

  • save() doesn’t return self anymore (was an API monster)
  • fix bug in find_one() method. Now returns None if no Document is found
  • fix bug when using default values
  • adding i18n list support
  • add i18n inheritance support
  • adding index inheritance support

Version 0.5

  • refactoring API which is getting much much more cleaner. Please see the migration page to keep your code up to date
  • 100% code coverage by 162 unit tests
  • lot of bug fix (too many to list them here)
  • add document size validation
  • add cross database reference support
  • i18n support

Version 0.4

  • add autoref support to belong_to (delete cascade)
  • changing collection dynamically
  • add immutable field (python tuple support)
  • add direction and ttl to index support
  • add connection sharing support
  • add json import/export for MongoDocument
  • full relation support (related_to)
  • add long type support

Version 0.3.3

  • add autoref support (thanks to @bwmcadams)
  • add mongodb index support (thanks to @marcammann)
  • adding CustomType (original idea from Phillip Oldham)
  • support now all type of subclassed supported type
  • add “delete cascade” feature
  • add the possibility to skip the validation layer for more performances
  • fix issue while passing queries to fetch() and update tutorial
  • self._collection must not be None in __init__
  • fix #11 - pylons_env extension documentation typo
  • add more complete test + docstring
  • fix issue #9 - bug with custom_types and nested dict in list