added 'ensure_index' and 'order_by' methods to queryset.
This commit is contained in:
parent
c58f377a0a
commit
551b2755d4
@ -11,8 +11,22 @@ class QuerySet(object):
|
|||||||
def __init__(self, document, collection):
|
def __init__(self, document, collection):
|
||||||
self._document = document
|
self._document = document
|
||||||
self._collection = collection
|
self._collection = collection
|
||||||
self._query = {'_types': self._document._class_name}
|
self._query = {}
|
||||||
self._cursor_obj = None
|
self._cursor_obj = None
|
||||||
|
self._ordering = []
|
||||||
|
|
||||||
|
def ensure_index(self, key_or_list, direction=None):
|
||||||
|
"""Ensure that the given indexes are in place.
|
||||||
|
"""
|
||||||
|
if isinstance(key_or_list, basestring):
|
||||||
|
# single-field indexes needn't specify a direction
|
||||||
|
if key_or_list.startswith("-"):
|
||||||
|
key_or_list = key_or_list[1:]
|
||||||
|
self._collection.ensure_index(key_or_list)
|
||||||
|
elif isinstance(key_or_list, (list, tuple)):
|
||||||
|
print key_or_list
|
||||||
|
self._collection.ensure_index(key_or_list)
|
||||||
|
return self
|
||||||
|
|
||||||
def __call__(self, **query):
|
def __call__(self, **query):
|
||||||
"""Filter the selected documents by calling the queryset with a query.
|
"""Filter the selected documents by calling the queryset with a query.
|
||||||
@ -91,7 +105,36 @@ class QuerySet(object):
|
|||||||
"""
|
"""
|
||||||
self._cursor.skip(n)
|
self._cursor.skip(n)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def order_by(self, *params):
|
||||||
|
"""Apply ordering conditions, Django-style.
|
||||||
|
|
||||||
|
e.g., ``Model.objects.().order_by("-published_date", "ordering")``
|
||||||
|
will order first by ``published_date DESC``, and then ``ordering ASC``.
|
||||||
|
|
||||||
|
"""
|
||||||
|
if not params:
|
||||||
|
self._ordering = []
|
||||||
|
for param in params:
|
||||||
|
if param.startswith("-"):
|
||||||
|
param = param[1:]
|
||||||
|
sort_dir = pymongo.DESCENDING
|
||||||
|
else:
|
||||||
|
sort_dir = pymongo.ASCENDING
|
||||||
|
sort_rule = (param, sort_dir)
|
||||||
|
|
||||||
|
if not sort_rule in self._ordering:
|
||||||
|
self._ordering.append(sort_rule)
|
||||||
|
self._cursor.sort(self._ordering)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def explain(self, format=False):
|
||||||
|
plan = self._cursor.explain()
|
||||||
|
if format:
|
||||||
|
import pprint
|
||||||
|
plan = pprint.pformat(plan)
|
||||||
|
return plan
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
"""Delete the documents matched by the query.
|
"""Delete the documents matched by the query.
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user