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

Aplikasi Manajemen RT Berbasis PHP & MySQL

Solusi Digital untuk Administrasi RT yang Transparan dan Efisien Di era digital seperti sekarang, pengelolaan…

6 hours ago

Script Aplikasi Booking System + AI (PHP & MySQL)

Solusi Booking Otomatis untuk Berbagai Jenis Bisnis Sedang mencari script aplikasi booking sistem lengkap dengan…

2 weeks ago

compress gambar sebelum diupload dengan javascript

Bismillaahirrohmaanirrohiim... Berikut ini cara kompress gambar sebelum diupload menggunakan javascript, tujuannya agar misalkan gambar dari…

3 months ago

Format angka dengan javascript

Bismillaahirrohmaanirrohiim... Berikut ini cara format angka menggunakan javascript, misalkan 1000 menjadi 1.000 atau 1500000 menjadi…

3 months ago

CPU 100% ternyata dipakai miner orang

Bismilaahirrohmaanirrohiim... jika server anda dipakai orang untuk mining, maka cpu usage akan habis dipakai dia,…

4 months ago

Cara Mematikan Mode SSL Virtualmin Webmin

Bismillaahirrohmaanirrohiim... masalah muncul saat akses https://ipaddress:10000 muncul seperti ini Error – Document follows This web…

6 months ago