|
9 | 9 | from mongoengine.connection import get_db
|
10 | 10 | from mongoengine.mongodb_support import (
|
11 | 11 | MONGODB_42,
|
| 12 | + MONGODB_80, |
12 | 13 | get_mongodb_version,
|
13 | 14 | )
|
14 | 15 | from mongoengine.pymongo_support import PYMONGO_VERSION
|
@@ -450,24 +451,40 @@ class Test(Document):
|
450 | 451 |
|
451 | 452 | # Need to be explicit about covered indexes as mongoDB doesn't know if
|
452 | 453 | # 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 |
| - |
463 | 454 | 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 |
471 | 488 |
|
472 | 489 | query_plan = Test.objects(a=1).explain()
|
473 | 490 | assert (
|
|
0 commit comments