Skip to content

Commit bc63ce8

Browse files
committed
Add support for mongodb 8.0 in the test_covered_index test function
1 parent 96037af commit bc63ce8

File tree

3 files changed

+36
-18
lines changed

3 files changed

+36
-18
lines changed

.github/workflows/github-actions.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ jobs:
5858
strategy:
5959
fail-fast: false
6060
matrix:
61-
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "pypy3.9", "pypy3.10", "pypy3.11"]
61+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "pypy3.9", "pypy3.10"]
6262
MONGODB: [$MONGODB_4_0]
6363
PYMONGO: [$PYMONGO_3_12]
6464
include:

mongoengine/mongodb_support.py

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
MONGODB_50 = (5, 0)
1414
MONGODB_60 = (6, 0)
1515
MONGODB_70 = (7, 0)
16+
MONGODB_80 = (8, 0)
1617

1718

1819
def get_mongodb_version():

tests/document/test_indexes.py

+34-17
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from mongoengine.connection import get_db
1010
from mongoengine.mongodb_support import (
1111
MONGODB_42,
12+
MONGODB_80,
1213
get_mongodb_version,
1314
)
1415
from mongoengine.pymongo_support import PYMONGO_VERSION
@@ -450,24 +451,40 @@ class Test(Document):
450451

451452
# Need to be explicit about covered indexes as mongoDB doesn't know if
452453
# the documents returned might have more keys in that here.
453-
query_plan = Test.objects(id=obj.id).exclude("a").explain()
454-
assert (
455-
query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IDHACK"
456-
)
457-
458-
query_plan = Test.objects(id=obj.id).only("id").explain()
459-
assert (
460-
query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IDHACK"
461-
)
462-
463454
mongo_db = get_mongodb_version()
464-
query_plan = Test.objects(a=1).only("a").exclude("id").explain()
465-
assert (
466-
query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IXSCAN"
467-
)
468-
469-
PROJECTION_STR = "PROJECTION" if mongo_db < MONGODB_42 else "PROJECTION_COVERED"
470-
assert query_plan["queryPlanner"]["winningPlan"]["stage"] == PROJECTION_STR
455+
if mongo_db >= MONGODB_80:
456+
query_plan = Test.objects(id=obj.id).exclude("a").explain()
457+
assert (
458+
query_plan["queryPlanner"]["winningPlan"]["stage"] == "EXPRESS_IXSCAN"
459+
)
460+
461+
query_plan = Test.objects(id=obj.id).only("id").explain()
462+
assert (
463+
query_plan["queryPlanner"]["winningPlan"]["stage"] == "EXPRESS_IXSCAN"
464+
)
465+
466+
query_plan = Test.objects(a=1).only("a").exclude("id").explain()
467+
assert (
468+
query_plan["queryPlanner"]["winningPlan"]["stage"] == "EXPRESS_IXSCAN"
469+
)
470+
elif mongo_db < MONGODB_80:
471+
query_plan = Test.objects(id=obj.id).exclude("a").explain()
472+
assert (
473+
query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IDHACK"
474+
)
475+
476+
query_plan = Test.objects(id=obj.id).only("id").explain()
477+
assert (
478+
query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IDHACK"
479+
)
480+
481+
query_plan = Test.objects(a=1).only("a").exclude("id").explain()
482+
assert (
483+
query_plan["queryPlanner"]["winningPlan"]["inputStage"]["stage"] == "IXSCAN"
484+
)
485+
486+
PROJECTION_STR = "PROJECTION" if mongo_db < MONGODB_42 else "PROJECTION_COVERED"
487+
assert query_plan["queryPlanner"]["winningPlan"]["stage"] == PROJECTION_STR
471488

472489
query_plan = Test.objects(a=1).explain()
473490
assert (

0 commit comments

Comments
 (0)