Skip to content

Commit

Permalink
Fix incorrect meta->data_returned for paginated results with MongoDB (
Browse files Browse the repository at this point in the history
#1141)

* Add test for `data_returned` with an offset

* Ignore offsets when performing MongoDB count query
  • Loading branch information
ml-evs committed May 8, 2022
1 parent 5db4452 commit 6133cf1
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 1 deletion.
3 changes: 2 additions & 1 deletion optimade/server/entry_collections/mongo.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,9 @@ def _run_db_query(
if not single_entry:
criteria_nolimit = criteria.copy()
criteria_nolimit.pop("limit", None)
skip = criteria_nolimit.pop("skip", 0)
data_returned = self.count(**criteria_nolimit)
more_data_available = nresults_now < data_returned
more_data_available = nresults_now + skip < data_returned
else:
# SingleEntryQueryParams, e.g., /structures/{entry_id}
data_returned = nresults_now
Expand Down
2 changes: 2 additions & 0 deletions tests/server/routers/test_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@ def test_get_next_responses(self, get_good_response):

cursor = json_response["data"].copy()
assert json_response["meta"]["more_data_available"]
assert json_response["meta"]["data_returned"] == total_data
more_data_available = True
next_request = json_response["links"]["next"]

while more_data_available:
next_response = get_good_response(next_request)
assert next_response["meta"]["data_returned"] == total_data
next_request = next_response["links"]["next"]
cursor.extend(next_response["data"])
more_data_available = next_response["meta"]["more_data_available"]
Expand Down

0 comments on commit 6133cf1

Please sign in to comment.