Mengenal Aggregate pada MongoDB
Operasi Aggregate
Operasi aggregate adalah salah satu jenis query yang ada pada MongoDB. Operasi aggregate biasanya digunakan untuk memproses sekumpulan data sekaligus untuk mendapatkan hasil tertentu. Beberapa contohnya adalah:
- Mengelompokan nilai dari beberapa document sekaligus
- Melakukan operasi pada data yang sudah dikelompokkan untuk mendapatkan satu hasil
Jika kalian sudah familiar dengan operasi groupBy pada database SQL, operasi aggregate merupakan solusi yang mirip pada MongoDB.
Aggregate Pipeline
Operasi aggregate memiliki urutan proses yang disebut sebagai Aggregate Pipeline. Aggregate pipeline akan dieksekusi secara sekuensial, luaran dari proses sebelumnya akan menjadi masukkan proses selanjutnya. Setiap proses pada aggregate pipeline disebut sebagai Stage. Setiap stage akan melakukan operasi pada data. Berikut adalah contoh operasi aggregate untuk menghitung jumlah mahasiswa dari Jakarta berdasarkan Angkatan masuk universitas.
db.mahasiswa.aggregate( [
// mendapatkan data mahasiswa yang berasal dari Jakarta
{
$match: { asalDaerah: "Jakarta" }
},
// menghitung jumlah mahasiswa berdasarkan angkatan masuk universitas
{
$group: { _id: "$angkatan", jumlah: { $sum: 1 } }
}
] )
Operasi aggregate pada contoh di atas memiliki 2 stage, yaitu:
- Stage
$match
Pada stage ini dilakukan operasi mendapatkan data-data mahasiswa yang berasal dari Jakarta. Hasil dari stage ini akan diberikan pada stage selanjutnya, yaitu$group
. - Stage
$group
Pada stage ini akan dilakukan pengelompokkan mahasiswa berdasarkan angkatan (field yang dipakai pada “_id”) yang ada, kemudian dihitung jumlah mahasiswa tiap group (menggunakan operasi$sum
).
Ada berbagai macam operasi yang bisa dilakukan pada aggregate pipeline, untuk daftar lengkap dan contoh penggunaannya bisa akses laman ini.
Kekurangan Operasi Aggregate
Meskipun memiliki penggunaan yang luas, operasi aggregate memiliki beberapa kekurangan, di antaranya:
Limitasi ukuran hasil dokumen
Karena dokumen hasil operasi aggregate akan menggunakan tipe data BSON, maka setiap dokumen hasil operasi memiliki ukuran maksimal 16 megabyte. Ini hanya berlaku untuk dokumen hasil akhir operasi, untuk dokumen keluaran tiap stage mungkin dapat lebih dari 16 megabyte.
Maksimal jumlah stage
Mulai dari MongoDB versi 5, satu aggregate pipeline hanya bisa menampung 1.000 stage.
Batasan penggunaan memory
MongoDB memiliki batasan memori 100 megabyte untuk satu operasi aggregate. Jika melebihi dari itu, maka akan menghasilkan error. Sebenarnya kalian bisa mengatur konfigurasi tambahan untuk mengatasi masalah ini, yaitu dengan mengatur { allowDiskUse: true }
, sejak MongoDB versi 6 konfigurasi ini sudah secara otomatis tersedia.
Salah satu contoh operasi yang bisa menghabiskan memori adalah $match dan $sort. Jika operasi tersebut tidak di indeks secara baik maka akan berakibat pada peningkatan pada memori yang digunakan.