From d0c7871d76451635bdb12316f93718dbb99ce8cd Mon Sep 17 00:00:00 2001 From: Curos Date: Sat, 30 Jun 2018 10:47:55 +0530 Subject: [PATCH] allow setting hint option on querybuilder --- src/Jenssegers/Mongodb/Query/Builder.php | 4 +++- tests/QueryBuilderTest.php | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index c425f5165..e6ada914d 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -375,10 +375,12 @@ public function getFresh($columns = []) if ($this->limit) { $options['limit'] = $this->limit; } + if ($this->hint) { + $options['hint'] = $this->hint; + } if ($columns) { $options['projection'] = $columns; } - // if ($this->hint) $cursor->hint($this->hint); // Fix for legacy support, converts the results to arrays instead of objects. $options['typeMap'] = ['root' => 'array', 'document' => 'array']; diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index ac1479d26..bfb5bc06b 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -701,4 +701,25 @@ public function testProjections() $this->assertEquals(1, count($result['tags'])); } } + + public function testHintOptions() + { + DB::collection('items')->insert([ + ['name' => 'fork', 'tags' => ['sharp', 'pointy']], + ['name' => 'spork', 'tags' => ['sharp', 'pointy', 'round', 'bowl']], + ['name' => 'spoon', 'tags' => ['round', 'bowl']], + ]); + + $results = DB::collection('items')->hint(['$natural' => -1])->get(); + + $this->assertArraySubset(['name' => 'spoon'], $results[0]); + $this->assertArraySubset(['name' => 'spork'], $results[1]); + $this->assertArraySubset(['name' => 'fork'], $results[2]); + + $results = DB::collection('items')->hint(['$natural' => 1])->get(); + + $this->assertArraySubset(['name' => 'spoon'], $results[2]); + $this->assertArraySubset(['name' => 'spork'], $results[1]); + $this->assertArraySubset(['name' => 'fork'], $results[0]); + } }