@@ -27,7 +27,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
2727 await TestUtils . destroyAllDataPermanently ( false ) ;
2828 } ) ;
2929
30- it_only_mongodb_version ( '<5.1 || >=6' ) ( 'query find with hint string' , async ( ) => {
30+ it_only_mongodb_version ( '<5.1 || >=6 <8 ' ) ( 'query find with hint string' , async ( ) => {
3131 const object = new TestObject ( ) ;
3232 await object . save ( ) ;
3333
@@ -50,7 +50,19 @@ describe_only_db('mongo')('Parse.Query hint', () => {
5050 expect ( explain . queryPlanner . winningPlan . queryPlan . inputStage . indexName ) . toBe ( '_id_' ) ;
5151 } ) ;
5252
53- it_only_mongodb_version ( '<5.1 || >=6' ) ( 'query find with hint object' , async ( ) => {
53+ it_only_mongodb_version ( '>=8' ) ( 'query find with hint string' , async ( ) => {
54+ const object = new TestObject ( ) ;
55+ await object . save ( ) ;
56+
57+ const collection = await config . database . adapter . _adaptiveCollection ( 'TestObject' ) ;
58+ let explain = await collection . _rawFind ( { _id : object . id } , { explain : true } ) ;
59+ expect ( explain . queryPlanner . winningPlan . stage ) . toBe ( 'EXPRESS_IXSCAN' ) ;
60+ explain = await collection . _rawFind ( { _id : object . id } , { hint : '_id_' , explain : true } ) ;
61+ expect ( explain . queryPlanner . winningPlan . stage ) . toBe ( 'FETCH' ) ;
62+ expect ( explain . queryPlanner . winningPlan . inputStage . indexName ) . toBe ( '_id_' ) ;
63+ } ) ;
64+
65+ it_only_mongodb_version ( '<5.1 || >=6 <8' ) ( 'query find with hint object' , async ( ) => {
5466 const object = new TestObject ( ) ;
5567 await object . save ( ) ;
5668
@@ -78,6 +90,20 @@ describe_only_db('mongo')('Parse.Query hint', () => {
7890 expect ( explain . queryPlanner . winningPlan . queryPlan . inputStage . keyPattern ) . toEqual ( { _id : 1 } ) ;
7991 } ) ;
8092
93+ it_only_mongodb_version ( '>=8' ) ( 'query find with hint object' , async ( ) => {
94+ const object = new TestObject ( ) ;
95+ await object . save ( ) ;
96+
97+ const collection = await config . database . adapter . _adaptiveCollection ( 'TestObject' ) ;
98+ let explain = await collection . _rawFind ( { _id : object . id } , { explain : true } ) ;
99+ expect ( explain . queryPlanner . winningPlan . stage ) . toBe ( 'EXPRESS_IXSCAN' ) ;
100+ explain = await collection . _rawFind ( { _id : object . id } , { hint : { _id : 1 } , explain : true } ) ;
101+ expect ( explain . queryPlanner . winningPlan . stage ) . toBe ( 'FETCH' ) ;
102+ expect ( explain . queryPlanner . winningPlan . inputStage . keyPattern ) . toEqual ( {
103+ _id : 1 ,
104+ } ) ;
105+ } ) ;
106+
81107 it_only_mongodb_version ( '<4.4' ) ( 'query aggregate with hint string' , async ( ) => {
82108 const object = new TestObject ( { foo : 'bar' } ) ;
83109 await object . save ( ) ;
0 commit comments