Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Indexed Document Class
Latest commit c6db6bd Shane R. Spencer renamed and redone
Failed to load latest commit information.
indicted renamed and redone
.gitignore renamed and redone
COPYING Added Base
README renamed and redone renamed and redone renamed and redone



indicted - Indexed Document Class


Find an list element, which is a dict, by a keys value


Take for example the following data.  This structure is being used to reduce 
relationships between a parent object and sub objects.  This allows us to create 
indexes that help with relationships rather than making multiple calls to a 
database.  This is just an example structure of a document.  This specific 
structure will benifit heavily from a multi-value index on **subdata._id**.

    "_id" : ObjectId("4f3eb7cac4f804960a859467"),
    "subdata" : [
            "_id" : ObjectId("4f3eb7cac4f804960a859468"),
            "bits" : 1234
            "_id" : ObjectId("4f3eb7cac4f804960a859469"),
            "bits" : 5678

If we access the **subdata** key in the root of this document we will be given 
an array when using standard Dict/List types.

[{u'_id': ObjectId('4f3eb7cac4f804960a859468'), u'bits': 1234.0},
 {u'_id': ObjectId('4f3eb7cac4f804960a859469'), u'bits': 5678.0}]

Ideally we would want to return the list element that matches a specific **_id** 
if the list contains dictionaries that have a key matching that ObjectId.  This 
is where indicted and Inist comes in.  InDict is a simple Dict wrapper 
that uses InList for all list type values.  As InList is initialized and 
modified it keeps an internal dictionary of **_id** references relating to list 
positions.  An extra function called **InList.find** is used to pull out a 
referenced object if it finds one.  **None** is returned otherwise.
import pprint
import pymongo

from bson import ObjectId

from indicted import InDict

class MongoInDict(InDict):
    INDEXCLASS = ObjectId
    INDEXKEY = '_id'

connection = pymongo.Connection(document_class=MongoInDict)
database = connection.test

data =



{u'_id': ObjectId('4f3eb7cac4f804960a859469'), u'bits': 5678.0}

There is also **indicted.OrderedInDict** that inherits 
**collections.OrderedDict**.  This is incredibly useful for maintaining the 
document key ordering of your documents.


Currently this module only creates references during the initialization of the 
list.  This will be addressed soon.

* Dot notation
* JSON encoding/decoding/pretty printing helpers
Something went wrong with that request. Please try again.