diff --git a/src/mango/test/15-execution-stats-test.py b/src/mango/test/15-execution-stats-test.py index 729b13d9246..2aa3b9bb8e4 100644 --- a/src/mango/test/15-execution-stats-test.py +++ b/src/mango/test/15-execution-stats-test.py @@ -74,17 +74,73 @@ def test_covering_json_index(self): self.assertEqual(resp["execution_stats"]["results_returned"], 3) def test_reporting_consistency(self): - resp = self.db.find( - {"age": {"$lte": 42}}, - fields=["name", "email", "age"], - limit=3, - return_raw=True, - executionStats=True, - ) - executionStats = resp["execution_stats"] - self.assertEqual(executionStats["total_keys_examined"], 3) - self.assertEqual(executionStats["total_docs_examined"], 3) - self.assertEqual(executionStats["results_returned"], 3) + cases = [ + { + "title": "with limit", + "selector": {"age": {"$lte": 42}}, + "fields": ["name", "email", "age"], + "limit": 3, + "total_keys_examined": 3, + "total_docs_examined": 3, + "results_returned": 3, + }, + { + "title": "partial matches", + "selector": {"favorites": {"$elemMatch": {"$eq": "Erlang"}}}, + "fields": ["name", "email", "twitter"], + "limit": 200, + "total_keys_examined": 15, + "total_docs_examined": 15, + "results_returned": 6, + }, + { + "title": "no matches, using _all_docs", + "selector": {"foo": "bar"}, + "fields": [], + "limit": 200, + "total_keys_examined": 25, + "total_docs_examined": 25, + "results_returned": 0, + }, + { + "title": "no matches, indexed column (no keys examined)", + "selector": {"name.first": "Lee", "name.last": "Jackson"}, + "fields": ["email", "twitter"], + "limit": 200, + "total_keys_examined": 0, + "total_docs_examined": 0, + "results_returned": 0, + }, + { + "title": "no matches, indexed column", + "selector": {"favorites": {"$elemMatch": {"$eq": "Haskell"}}}, + "fields": ["name", "email", "twitter"], + "limit": 200, + "total_keys_examined": 15, + "total_docs_examined": 15, + "results_returned": 0, + }, + ] + + for case in cases: + with self.subTest(scenario=case["title"]): + resp = self.db.find( + case["selector"], + fields=case["fields"], + limit=case["limit"], + return_raw=True, + executionStats=True, + ) + executionStats = resp["execution_stats"] + self.assertEqual( + executionStats["total_keys_examined"], case["total_keys_examined"] + ) + self.assertEqual( + executionStats["total_docs_examined"], case["total_docs_examined"] + ) + self.assertEqual( + executionStats["results_returned"], case["results_returned"] + ) @unittest.skipUnless(mango.has_text_service(), "requires text service")