Compare commits
3 Commits
master
...
batch-size
Author | SHA1 | Date | |
---|---|---|---|
|
34ba527e6d | ||
|
ea9027755f | ||
|
43668a93a2 |
@ -82,6 +82,7 @@ class BaseQuerySet(object):
|
|||||||
self._limit = None
|
self._limit = None
|
||||||
self._skip = None
|
self._skip = None
|
||||||
self._hint = -1 # Using -1 as None is a valid value for hint
|
self._hint = -1 # Using -1 as None is a valid value for hint
|
||||||
|
self._batch_size = None
|
||||||
self.only_fields = []
|
self.only_fields = []
|
||||||
self._max_time_ms = None
|
self._max_time_ms = None
|
||||||
|
|
||||||
@ -781,6 +782,19 @@ class BaseQuerySet(object):
|
|||||||
queryset._hint = index
|
queryset._hint = index
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
def batch_size(self, size):
|
||||||
|
"""Limit the number of documents returned in a single batch (each
|
||||||
|
batch requires a round trip to the server).
|
||||||
|
|
||||||
|
See http://api.mongodb.com/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.batch_size
|
||||||
|
for details.
|
||||||
|
|
||||||
|
:param size: desired size of each batch.
|
||||||
|
"""
|
||||||
|
queryset = self.clone()
|
||||||
|
queryset._batch_size = size
|
||||||
|
return queryset
|
||||||
|
|
||||||
def distinct(self, field):
|
def distinct(self, field):
|
||||||
"""Return a list of distinct values for a given field.
|
"""Return a list of distinct values for a given field.
|
||||||
|
|
||||||
@ -1467,6 +1481,9 @@ class BaseQuerySet(object):
|
|||||||
if self._hint != -1:
|
if self._hint != -1:
|
||||||
self._cursor_obj.hint(self._hint)
|
self._cursor_obj.hint(self._hint)
|
||||||
|
|
||||||
|
if self._batch_size is not None:
|
||||||
|
self._cursor_obj.batch_size(self._batch_size)
|
||||||
|
|
||||||
return self._cursor_obj
|
return self._cursor_obj
|
||||||
|
|
||||||
def __deepcopy__(self, memo):
|
def __deepcopy__(self, memo):
|
||||||
|
@ -337,6 +337,34 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
query = query.filter(boolfield=True)
|
query = query.filter(boolfield=True)
|
||||||
self.assertEqual(query.count(), 1)
|
self.assertEqual(query.count(), 1)
|
||||||
|
|
||||||
|
def test_batch_size(self):
|
||||||
|
"""Ensure that batch_size works."""
|
||||||
|
class A(Document):
|
||||||
|
s = StringField()
|
||||||
|
|
||||||
|
A.drop_collection()
|
||||||
|
|
||||||
|
for i in range(100):
|
||||||
|
A.objects.create(s=str(i))
|
||||||
|
|
||||||
|
# test iterating over the result set
|
||||||
|
cnt = 0
|
||||||
|
for a in A.objects.batch_size(10):
|
||||||
|
cnt += 1
|
||||||
|
self.assertEqual(cnt, 100)
|
||||||
|
|
||||||
|
# test chaining
|
||||||
|
qs = A.objects.all()
|
||||||
|
qs = qs.limit(10).batch_size(20).skip(91)
|
||||||
|
cnt = 0
|
||||||
|
for a in qs:
|
||||||
|
cnt += 1
|
||||||
|
self.assertEqual(cnt, 9)
|
||||||
|
|
||||||
|
# test invalid batch size
|
||||||
|
qs = A.objects.batch_size(-1)
|
||||||
|
self.assertRaises(ValueError, lambda: list(qs))
|
||||||
|
|
||||||
def test_update_write_concern(self):
|
def test_update_write_concern(self):
|
||||||
"""Test that passing write_concern works"""
|
"""Test that passing write_concern works"""
|
||||||
self.Person.drop_collection()
|
self.Person.drop_collection()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user