Skip to content

Commit 9f0ad73

Browse files
committed
make querying use aggregate() instead of find()
1 parent 682abeb commit 9f0ad73

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

django_mongodb/query.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,19 @@ def delete(self):
8585
def get_cursor(self):
8686
if self.query.low_mark == self.query.high_mark:
8787
return []
88-
fields = [col.target.column for col in self.columns] if self.columns else None
89-
cursor = self.collection.find(self.mongo_query, fields)
88+
fields = {col.target.column: 1 for col in self.columns} if self.columns else None
89+
pipeline = []
90+
if self.mongo_query:
91+
pipeline.append({"$match": self.mongo_query})
92+
if fields:
93+
pipeline.append({"$project": fields})
9094
if self.ordering:
91-
cursor.sort(self.ordering)
95+
pipeline.append({"$sort": dict(self.ordering)})
9296
if self.query.low_mark > 0:
93-
cursor.skip(self.query.low_mark)
97+
pipeline.append({"$skip": self.query.low_mark})
9498
if self.query.high_mark is not None:
95-
cursor.limit(int(self.query.high_mark - self.query.low_mark))
96-
return cursor
99+
pipeline.append({"$limit": self.query.high_mark - self.query.low_mark})
100+
return self.collection.aggregate(pipeline)
97101

98102

99103
def where_node(self, compiler, connection):

django_mongodb/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def wrapper(self, *args, **kwargs):
8383
return wrapper
8484

8585
# These are the operations that this backend uses.
86+
aggregate = logging_wrapper("aggregate")
8687
count_documents = logging_wrapper("count_documents")
8788
insert_many = logging_wrapper("insert_many")
8889
delete_many = logging_wrapper("delete_many")

0 commit comments

Comments
 (0)