MongoDB

MongoDB, agregasi adalah cara untuk memproses dan mentransformasi data dalam sebuah koleksi. Agregasi memungkinkan Anda melakukan berbagai operasi, seperti penyaringan, pengelompokan, pengurutan, dan proyeksi, pada dokumen-dokumen dalam sebuah koleksi. Framework agregasi adalah fitur yang kuat yang memungkinkan Anda melakukan manipulasi dan transformasi data yang kompleks.

Pipeline agregasi MongoDB adalah serangkaian tahap yang dilalui dokumen, memungkinkan Anda memproses dan mentransformasi data. Setiap tahap dalam pipeline mewakili operasi atau transformasi tertentu yang diterapkan pada dokumen. Output dari satu tahap berfungsi sebagai input untuk tahap berikutnya.

Berikut adalah gambaran singkat tentang beberapa tahap agregasi umum beserta fungsinya:

$match: Menyaring dokumen berdasarkan kondisi tertentu.

{ $match: { field: value } }

$group: Mengelompokkan dokumen berdasarkan kunci tertentu dan memungkinkan Anda melakukan fungsi agregat pada data yang dikelompokkan.

{ $group: { _id: "$field", count: { $sum: 1 } } }

$project: Mengubah bentuk dokumen dengan menyertakan, menghilangkan, atau mengganti nama bidang.

{ $project: { newField: "$oldField", _id: 0 } }

$sort: Mengurutkan dokumen berdasarkan kriteria tertentu.

{ $sort: { field: 1 } }

$limit: Membatasi jumlah dokumen yang diteruskan ke tahap berikutnya.

$unwind: Membongkar bidang array, membuat dokumen baru untuk setiap elemen dalam array.

{ $unwind: "$arrayField" }

$lookup: Melakukan left outer join dengan koleksi lain.

{ $lookup: { from: "otherCollection", localField: "field", foreignField: "otherField", as: "newField" } }

Tahap-tahap ini dapat digabungkan untuk membuat pipeline agregasi yang kompleks sesuai kebutuhan pemrosesan data tertentu. Anda dapat bereksperimen dengan berbagai tahap dan konfigurasinya untuk mencapai hasil yang diinginkan.

Berikut adalah contoh sederhana dari sebuah pipeline agregasi MongoDB:

db.koleksi.aggregate([ { $match: { status: "A" } }, { $group: { _id: "$jenis", total: { $sum: "$jumlah" } } }, { $sort: { total: -1 } }, { $limit: 5 } ]);

Pada contoh ini, menyaring dokumen dengan status "A," mengelompokkannya berdasarkan bidang "jenis," menghitung jumlah total untuk setiap kelompok, mengurutkan hasil secara menurun berdasarkan total jumlah, dan pada akhirnya, membatasi output menjadi 5 hasil teratas.

$skip: Melompati sejumlah dokumen pada tahap tertentu dalam pipeline.

{ $skip: 5 }

$out: Menyimpan hasil agregasi ke dalam koleksi baru atau menggantikan koleksi yang sudah ada.

{ $out: "hasil_agregasi" }

$facet: Memungkinkan Anda melakukan beberapa tahap aggregasi secara paralel dan mengembalikan hasilnya dalam sebuah struktur yang terorganisir.

{ $facet: { "hasil_1": [ ... ], "hasil_2": [ ... ] } }

$geoNear: Mengembalikan dokumen-dokumen terurut berdasarkan jarak spasial dari lokasi yang ditentukan.

Tahap-tahap yang Sering Digunakan:

Dalam praktiknya, tahap-tahap yang sering digunakan tergantung pada jenis analisis atau transformasi data yang Anda lakukan. Beberapa tahap yang sering digunakan melibatkan:

  • $match: Untuk menyaring dokumen berdasarkan kondisi tertentu.

  • $group: Untuk melakukan pengelompokan dan agregasi data.

  • $project: Untuk menyusun kembali struktur dokumen atau memilih bidang tertentu.

  • $sort: Untuk mengurutkan hasil berdasarkan kriteria tertentu.

  • $limit: Untuk membatasi jumlah dokumen yang dihasilkan.

Penggunaan tahap-tahap ini sangat bervariasi tergantung pada kebutuhan spesifik proyek atau query Anda. Sebagai contoh, query untuk menganalisis data penjualan mungkin memanfaatkan $match untuk memilih data tertentu, $group untuk menghitung total penjualan per produk, dan $sort untuk mengurutkan hasil berdasarkan total penjualan.

dapat menggabungkan tahap-tahap ini secara kreatif untuk mencapai hasil yang diinginkan sesuai dengan kebutuhan analisis data.