Categories: MongoDB

MongoDB group by dan count (MySQL dan PHP)

Bismillaahirrohmaanirrohiim…

Pada MySQL, untuk menjalankan query group by dan count atau sum caranya cukup mudah, bisa dengan query di bawah ini:

select kolomA, count(kode) as jumkode from tabel where status='oke' group by kolomA order by jumkode DESC 

Jika pada mongoDB, menggunakan fungsi aggregate

 db.namacollection.aggregate([{ $match: { status: "oke" } },{"$group": {_id: "$kolomA",count: {$sum: 1}}},{$sort: {count: -1}}])

Jika menggunakan php driver mongoDB, perintahnya seperti berikut

$manager = new MongoDB\Driver\Manager();
$command = new MongoDB\Driver\Command([
  'aggregate' => 'namacollection',
  'pipeline' => [
      ['$match'=>['status'=>'oke']],
      ['$group' => ['_id' => '$kolomA', 'count' => ['$sum' => 1]]],
      ['$sort'=>['count'=>-1]],
  ],
  'cursor' => new stdClass,
]);

$cursor = $manager->executeCommand('namadatabase', $command);

Nah, sekarang jika ingin memberi filter range tanggal dari tanggal sekian sampai tanggal sekian, perintah di mongoDB nya sebagai berikut:

db.namacollection.aggregate([{ $match: { tanggal: {$gte:ISODate("2021-05-01"),$lt:ISODate("2020-05-30"}} } },{"$group": {_id: "$kolomA",count: {$sum: 1}}},{$sort: {count: -1}}])
//$gte bisa diganti $gt kalau error

Versi phpnya adalah seperti di bawah ini:

$manager = new MongoDB\Driver\Manager();
$command = new MongoDB\Driver\Command([
  'aggregate' => 'namacollection',
  'pipeline' => [
   ['$match'=>['tanggal'=>
                    [
                        '$gt'=>new MongoDB\BSON\UTCDatetime(strtotime('2021-05-01 00:00:00') * 1000),
                        '$lt'=>new MongoDB\BSON\UTCDatetime(strtotime('2020-05-30 23:59:59') * 1000),
                    ] 
                   ]
        ],
      ['$group' => ['_id' => '$kolomA', 'count' => ['$sum' => 1]]],
      ['$sort'=>['count'=>-1]],
  ],
  'cursor' => new stdClass,
]);

$cursor = $manager->executeCommand('namadatabase', $command);
//format kolom tanggal haruslah berupa datetime

Demikian, semoga bermanfaat…

Bagikan
rasupe

Recent Posts

CMS Website Desain Interior – PHP MySQL

CMS (Content Management System) Web untuk Desain Interior adalah solusi lengkap untuk mempresentasikan bisnis desain…

2 days ago

Source code Template website sekolah dengan react js

Bismillaahirrohmaanirrohiim... Berikut ini source code yang dapat dimodifikasi untuk membuat front end website sekolah dengan…

3 weeks ago

Subdomain pada cyberpanel tidak dapat diakses

Bismillaahirrohmaanirrohiim... Jika domain dan sub domainnya berada dalam satu vps cyberpanel, maka seringkali jadi tidak…

4 weeks ago

10 Aplikasi Kasir Terbaik di Indonesia (2025)

Bismillaahirrohmaanirrohiim... Dalam era digital saat ini, penggunaan aplikasi kasir (Point of Sale/POS) menjadi solusi penting…

4 weeks ago

Website di aapanel sering mati sendiri

Bismillaahirrohmaanirrohiim... Saat browsing-browsing saya seringkali melihat iklan aapanel, sekilas membuat penasaran sampai akhirnya saya mencoba…

4 weeks ago

Reset password cyberpanel via SSH

Bismillaahirrohmaanirrohiim... Berikut ini perintah untuk reset password admin cyberpanel melalui SSH command line. pastikan login…

4 weeks ago