Skip to content
This repository was archived by the owner on Aug 22, 2023. It is now read-only.

Commit 150ba36

Browse files
committed
Use countDocument or estimatedDocumentsCount when no filter is provided
Add functional test
1 parent db771b1 commit 150ba36

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/Query/Builder.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,11 @@ public function toMql(): array
273273
$aggregations = blank($this->aggregate['columns']) ? [] : $this->aggregate['columns'];
274274

275275
if (in_array('*', $aggregations) && $function == 'count') {
276-
return ['estimatedDocumentCount' => [$wheres, []]];
276+
if ($wheres) {
277+
return ['countDocuments' => [$wheres, []]];
278+
}
279+
280+
return ['estimatedDocumentCount' => [[], []]];
277281
} elseif ($function == 'count') {
278282
// Translate count into sum.
279283
$group['aggregate'] = ['$sum' => 1];

tests/TransactionTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,32 @@ public function testDecrementWithRollBack(): void
291291
$this->assertTrue(DB::collection('users')->where('name', 'klinson')->where('age', 20)->exists());
292292
}
293293

294+
/**
295+
* @testWith [false]
296+
* [true]
297+
*/
298+
public function testCount(bool $transaction)
299+
{
300+
if ($transaction) {
301+
DB::beginTransaction();
302+
}
303+
304+
$this->assertEquals(0, DB::collection('users')->count());
305+
$this->assertEquals(0, DB::collection('users')->where('age', 20)->count());
306+
DB::collection('users')->insert(['name' => 'klinson', 'age' => 20, 'title' => 'admin']);
307+
DB::collection('users')->insert(['name' => 'bryan', 'age' => 18, 'title' => 'user']);
308+
$this->assertEquals(2, DB::collection('users')->count());
309+
310+
if ($transaction) {
311+
// until transaction is committed, count with filter is incorrect
312+
$this->assertEquals(0, DB::collection('users')->where('age', 20)->count());
313+
DB::commit();
314+
}
315+
316+
$this->assertEquals(1, DB::collection('users')->where('age', 20)->count());
317+
$this->assertEquals(0, DB::collection('users')->where('age', 10)->count());
318+
}
319+
294320
public function testQuery()
295321
{
296322
/** rollback test */

0 commit comments

Comments
 (0)