From 2c95ab737dba442d2b8836ed4dd07552605ba135 Mon Sep 17 00:00:00 2001 From: Ditty Date: Fri, 31 Jan 2020 11:55:42 +0300 Subject: [PATCH 1/2] allow setting hint option on querybuilder Co-Authored-By: Manan Jadhav --- 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 28d781a66..558edbdf3 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -384,10 +384,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 bc30ad66b..90040d046 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -737,4 +737,25 @@ public function testValue() $this->assertEquals('Herman', DB::collection('books')->value('author.first_name')); $this->assertEquals('Melville', DB::collection('books')->value('author.last_name')); } + + 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]); + } } From 8a51887c715ebb48a52b650a47d12263e0302aa6 Mon Sep 17 00:00:00 2001 From: Ditty Date: Fri, 31 Jan 2020 13:01:04 +0300 Subject: [PATCH 2/2] Remove depereced arraysubset --- tests/QueryBuilderTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 90040d046..625e59cad 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -748,14 +748,14 @@ public function testHintOptions() $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]); + $this->assertEquals('spoon', $results[0]['name']); + $this->assertEquals('spork', $results[1]['name']); + $this->assertEquals('fork', $results[2]['name']); $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]); + $this->assertEquals('spoon', $results[2]['name']); + $this->assertEquals('spork', $results[1]['name']); + $this->assertEquals('fork', $results[0]['name']); } }