@@ -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
@@ -39,7 +39,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
3939 expect ( explain . queryPlanner . winningPlan . inputStage . indexName ) . toBe ( '_id_' ) ;
4040 } ) ;
4141
42- it_only_mongodb_version ( '>=5.1<6' ) ( 'query find with hint string' , async ( ) => {
42+ it_only_mongodb_version ( '>=5.1 <6' ) ( 'query find with hint string' , async ( ) => {
4343 const object = new TestObject ( ) ;
4444 await object . save ( ) ;
4545
@@ -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
@@ -64,7 +76,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
6476 } ) ;
6577 } ) ;
6678
67- it_only_mongodb_version ( '>=5.1<6' ) ( 'query find with hint object' , async ( ) => {
79+ it_only_mongodb_version ( '>=5.1 <6' ) ( 'query find with hint object' , async ( ) => {
6880 const object = new TestObject ( ) ;
6981 await object . save ( ) ;
7082
@@ -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 ( ) ;
@@ -100,7 +126,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
100126 expect ( queryPlanner . winningPlan . inputStage . indexName ) . toBe ( '_id_' ) ;
101127 } ) ;
102128
103- it_only_mongodb_version ( '>=4.4<5.1' ) ( 'query aggregate with hint string' , async ( ) => {
129+ it_only_mongodb_version ( '>=4.4 <5.1' ) ( 'query aggregate with hint string' , async ( ) => {
104130 const object = new TestObject ( { foo : 'bar' } ) ;
105131 await object . save ( ) ;
106132
@@ -124,7 +150,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
124150 expect ( queryPlanner . winningPlan . inputStage . inputStage . indexName ) . toBe ( '_id_' ) ;
125151 } ) ;
126152
127- it_only_mongodb_version ( '>=5.1<5.2' ) ( 'query aggregate with hint string' , async ( ) => {
153+ it_only_mongodb_version ( '>=5.1 <5.2' ) ( 'query aggregate with hint string' , async ( ) => {
128154 const object = new TestObject ( { foo : 'bar' } ) ;
129155 await object . save ( ) ;
130156
@@ -192,7 +218,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
192218 expect ( queryPlanner . winningPlan . inputStage . keyPattern ) . toEqual ( { _id : 1 } ) ;
193219 } ) ;
194220
195- it_only_mongodb_version ( '>=4.4<5.1' ) ( 'query aggregate with hint object' , async ( ) => {
221+ it_only_mongodb_version ( '>=4.4 <5.1' ) ( 'query aggregate with hint object' , async ( ) => {
196222 const object = new TestObject ( { foo : 'bar' } ) ;
197223 await object . save ( ) ;
198224
@@ -217,7 +243,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
217243 expect ( queryPlanner . winningPlan . inputStage . inputStage . keyPattern ) . toEqual ( { _id : 1 } ) ;
218244 } ) ;
219245
220- it_only_mongodb_version ( '>=5.1<5.2' ) ( 'query aggregate with hint object' , async ( ) => {
246+ it_only_mongodb_version ( '>=5.1 <5.2' ) ( 'query aggregate with hint object' , async ( ) => {
221247 const object = new TestObject ( { foo : 'bar' } ) ;
222248 await object . save ( ) ;
223249
@@ -267,7 +293,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
267293 expect ( queryPlanner . winningPlan . queryPlan . inputStage . inputStage . keyPattern ) . toEqual ( { _id : 1 } ) ;
268294 } ) ;
269295
270- it_only_mongodb_version ( '<5.1>=6' ) ( 'query find with hint (rest)' , async ( ) => {
296+ it_only_mongodb_version ( '<5.1 || >=6' ) ( 'query find with hint (rest)' , async ( ) => {
271297 const object = new TestObject ( ) ;
272298 await object . save ( ) ;
273299 let options = Object . assign ( { } , masterKeyOptions , {
@@ -292,7 +318,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
292318 expect ( explain . queryPlanner . winningPlan . inputStage . inputStage . indexName ) . toBe ( '_id_' ) ;
293319 } ) ;
294320
295- it_only_mongodb_version ( '>=5.1<6' ) ( 'query find with hint (rest)' , async ( ) => {
321+ it_only_mongodb_version ( '>=5.1 <6' ) ( 'query find with hint (rest)' , async ( ) => {
296322 const object = new TestObject ( ) ;
297323 await object . save ( ) ;
298324 let options = Object . assign ( { } , masterKeyOptions , {
@@ -344,7 +370,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
344370 expect ( queryPlanner . winningPlan . inputStage . keyPattern ) . toEqual ( { _id : 1 } ) ;
345371 } ) ;
346372
347- it_only_mongodb_version ( '>=4.4<5.1' ) ( 'query aggregate with hint (rest)' , async ( ) => {
373+ it_only_mongodb_version ( '>=4.4 <5.1' ) ( 'query aggregate with hint (rest)' , async ( ) => {
348374 const object = new TestObject ( { foo : 'bar' } ) ;
349375 await object . save ( ) ;
350376 let options = Object . assign ( { } , masterKeyOptions , {
@@ -377,7 +403,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
377403 expect ( queryPlanner . winningPlan . inputStage . inputStage . keyPattern ) . toEqual ( { _id : 1 } ) ;
378404 } ) ;
379405
380- it_only_mongodb_version ( '>=5.1<5.2' ) ( 'query aggregate with hint (rest)' , async ( ) => {
406+ it_only_mongodb_version ( '>=5.1 <5.2' ) ( 'query aggregate with hint (rest)' , async ( ) => {
381407 const object = new TestObject ( { foo : 'bar' } ) ;
382408 await object . save ( ) ;
383409 let options = Object . assign ( { } , masterKeyOptions , {
0 commit comments