'Get the query dict that can be used to fetch this object from
the database. Most of the time it\'s a simple PK lookup, but in
case of a sharded collection with a compound shard key, it can
contain a more complex query.'

@property
def _object_key(self):

    select_dict = {'pk': self.pk}
    shard_key = self.__class__._meta.get('shard_key', tuple())
    for k in shard_key:
        path = self._lookup_field(k.split('.'))
        actual_key = [p.db_field for p in path]
        val = self
        for ak in actual_key:
            val = getattr(val, ak)
        select_dict['__'.join(actual_key)] = val
    return select_dict
