From 3166fc5137dcfd7f429f9bea516612d7c98e8c50 Mon Sep 17 00:00:00 2001 From: josemiguelq Date: Sun, 20 Jan 2019 10:51:24 -0200 Subject: [PATCH 1/4] using normal query when paginating --- src/Jenssegers/Mongodb/Query/Builder.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index a340976e3..450ea4502 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -235,7 +235,7 @@ public function getFresh($columns = []) $wheres = $this->compileWheres(); // Use MongoDB's aggregation framework when using grouping or aggregation functions. - if ($this->groups || $this->aggregate || $this->paginating) { + if ($this->groups || $this->aggregate) { $group = []; $unwinds = []; @@ -279,15 +279,7 @@ public function getFresh($columns = []) } } } - - // When using pagination, we limit the number of returned columns - // by adding a projection. - if ($this->paginating) { - foreach ($this->columns as $column) { - $this->projections[$column] = 1; - } - } - + // The _id field is mandatory when using grouping. if ($group && empty($group['_id'])) { $group['_id'] = null; From ce786e624da3cad37f20cd4157d81a7cc91d71a8 Mon Sep 17 00:00:00 2001 From: josemiguelq Date: Sun, 20 Jan 2019 17:19:56 -0200 Subject: [PATCH 2/4] count --- src/Jenssegers/Mongodb/Query/Builder.php | 27 ++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index 450ea4502..af18ec2bd 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -270,11 +270,30 @@ public function getFresh($columns = []) $column = implode('.', $splitColumns); } - // Translate count into sum. - if ($function == 'count') { + // Null coalense only > 7.2 + + $aggregations = blank($this->aggregate['collumns']) ? [] : $this->aggregate['collumns']; + + if (in_array('*', $aggregations) && $function == 'count') { + // When ORM is paginating, count doesnt need a aggregation, just a cursor operation + // elseif added to use this only in pagination + // https://docs.mongodb.com/manual/reference/method/cursor.count/ + // count method returns int + + $totalResults = $this->collection->count($wheres); + // Preserving format expected by framework + $results = [ + [ + "_id" => null, + "aggregate" => $totalResults + ] + ]; + return $this->useCollections ? new Collection($results) : $results; + } elseif ($function == 'count') { + // Translate count into sum. $group['aggregate'] = ['$sum' => 1]; - } // Pass other functions directly. - else { + + } else { $group['aggregate'] = ['$' . $function => '$' . $column]; } } From 82757887f97bbf7ea9d8db377a8cb4d9dcd0dd31 Mon Sep 17 00:00:00 2001 From: josemiguelq Date: Sun, 20 Jan 2019 19:49:46 -0200 Subject: [PATCH 3/4] typo --- src/Jenssegers/Mongodb/Query/Builder.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index af18ec2bd..ac97c3f65 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -272,7 +272,7 @@ public function getFresh($columns = []) // Null coalense only > 7.2 - $aggregations = blank($this->aggregate['collumns']) ? [] : $this->aggregate['collumns']; + $aggregations = blank($this->aggregate['columns']) ? [] : $this->aggregate['columns']; if (in_array('*', $aggregations) && $function == 'count') { // When ORM is paginating, count doesnt need a aggregation, just a cursor operation @@ -284,8 +284,8 @@ public function getFresh($columns = []) // Preserving format expected by framework $results = [ [ - "_id" => null, - "aggregate" => $totalResults + '_id' => null, + 'aggregate' => $totalResults ] ]; return $this->useCollections ? new Collection($results) : $results; From 65a94df2776e9f3d844705bd50b91f25bcac061c Mon Sep 17 00:00:00 2001 From: jose miguel Date: Thu, 31 Oct 2019 10:49:15 -0300 Subject: [PATCH 4/4] linter --- src/Jenssegers/Mongodb/Query/Builder.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index f77923a35..28d781a66 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -289,7 +289,6 @@ public function getFresh($columns = []) } elseif ($function == 'count') { // Translate count into sum. $group['aggregate'] = ['$sum' => 1]; - } else { $group['aggregate'] = ['$' . $function => '$' . $column]; }