Kita telah menempuh Section Aggregation dan Indexing konsep demi konsep. Proyek ini menggabungkan semuanya menjadi satu pekerjaan utuh: dashboard analitik penjualan toko buku — mengolah 2000 transaksi mentah menjadi omzet per kategori, peringkat produk, tren bulanan, dan laporan harian yang siap ditampilkan. Kita berperan sebagai analis data yang bekerja langsung dari terminal: merancang dataset, menyusun pipeline, membuktikan dampak index lewat explain, lalu mengemas hasilnya.
Seluruh kode proyek berbentuk skrip JavaScript yang dijalankan mongosh lewat opsi --file, sama seperti proyek-proyek sebelumnya. Fokus kita tetap pada bahasa query dan perancangan data — dua inti pekerjaan bersama MongoDB.
Tujuan Proyek #
Setelah menyelesaikan proyek ini, kita memiliki pipeline analitik dengan kemampuan berikut:
- Dataset yang dapat direproduksi: 2000 transaksi sintetis dibangkitkan PRNG mulberry32 ber-seed tetap pada rentang 1 Januari – 30 Juni 2026, sehingga setiap angka laporan identik di setiap eksekusi.
- Laporan inti: omzet per kategori, per bulan, dan harian dengan
$dateTrunc; peringkat produk dengan kontribusi persentase; tren bulanan dengan$setWindowFields(delta dan rata-rata bergerak). - Pipeline yang terukur: index
tanggaldanitems.kategori + tanggaldibuktikan lewat output explain asli — COLLSCAN menjadi IXSCAN, lalu proyeksi tertutup yang tidak menyentuh collection sama sekali. - Keluaran siap tampil: dashboard multi-metriks satu pipeline
$facet, laporan harian yang dimaterialisasi ke collectionlaporan_harianlewat$merge, tabel ASCII di terminal, dan jalur ekspor ke chart library. - Suite tes mandiri: 19 assertion memverifikasi konsistensi angka laporan terhadap perhitungan ulang sederhana — ditutup dengan
SEMUA TES LULUS.
Prasyarat #
Proyek ini memakai materi dari Section Aggregation dan Indexing. Sebelum mulai, pastikan kita sudah memahami:
- Aggregation — stage
$match,$group,$unwind, dan$project(chapter Match, Group, Unwind), operator tanggal (Date Aggregation Operators), window function (Window Functions), hingga$facetdan$merge(Facet, Merge dan Out). - Indexing — cara kerja index (Mengapa Index Penting), compound dan multikey index, covered query, serta membaca explain (Explain Query Plans).
- Administrasi ringan — cukup nyaman menjalankan skrip
--filedari terminal.
Server yang dipakai adalah replika lingkungan Course: single-node replica set rs0 di 127.0.0.1:27017, diakses mongosh dengan connection string mongodb://127.0.0.1:27017/?directConnection=true.
Hasil Akhir #
Proyek selesai dengan satu database proyek_analitik berisi collection transaksi (2000 document, 4071 baris item, omzet Rp1.808.214.000), dua index, collection laporan_harian hasil materialisasi, dan lima skrip yang dapat dijalankan ulang kapan pun:
| Berkas | Peran |
|---|---|
src/dataset-seed.js | Mereset database dan membangkitkan 2000 transaksi deterministik |
src/laporan-omzet.js | Omzet per kategori, per bulan, dan harian |
src/laporan-produk.js | Peringkat produk, kontribusi persen, top-N |
src/laporan-tren.js | Delta bulanan dan rata-rata bergerak 3 bulan |
src/optimasi-index.js | Dua index plus bukti explain sebelum/sesudah |
tests/semua-tes.js | Suite tes mandiri; mencetak SEMUA TES LULUS |
Seluruh berkas tersebut dapat diunduh lewat tombol unduhan pada code block di bagian yang membahasnya.
Peta Bagian #
Proyek dikerjakan dalam empat bagian berurutan — setiap bagian dibangun di atas dataset yang sama:
- Bagian 1 — Menyiapkan Dataset: merancang collection
transaksi, memahami seed deterministik, lalu mengisi dan memeriksa dataset. - Bagian 2 — Aggregation Pipeline: menyusun laporan omzet, produk, dan tren sambil membaca angkanya sebagai analis.
- Bagian 3 — Indexing dan Optimization: memasang dua index, membaca explain dan indexBounds, serta
allowDiskUse. - Bagian 4 — Menyajikan Hasil Analisis: dashboard
$facet, materialisasi$merge, tabel ASCII, ekspor ke chart library, dan suite tes penutup.
Menjalankan Kode Proyek #
Buat folder proyek dengan struktur berikut — setiap berkas diunduh dari bagian yang sesuai:
dashboard-analitik/
├── src/
│ ├── dataset-seed.js
│ ├── laporan-omzet.js
│ ├── laporan-produk.js
│ ├── laporan-tren.js
│ └── optimasi-index.js
└── tests/
└── semua-tes.jsDari folder dashboard-analitik/, jalankan skrip sesuai urutannya:
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/dataset-seed.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/laporan-omzet.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/laporan-produk.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/laporan-tren.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/optimasi-index.jsUntuk mengulang dari kondisi awal, cukup jalankan kembali dataset-seed.js — skrip tersebut mereset seluruh database proyek_analitik sebelum mengisi data. Suite tes dapat dijalankan kapan saja tanpa urutan karena tes menyiapkan datanya sendiri di database terpisah proyek_analitik_tes:
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file tests/semua-tes.jsSiapkan dataset penjualan dan desain collection analitik.
Buka → # Bagian 2: Aggregation PipelineBangun pipeline laporan penjualan, tren, dan peringkat produk.
Buka → # Bagian 3: Indexing dan OptimizationOptimalkan pipeline dengan index dan projection yang tepat.
Buka → # Bagian 4: Menyajikan Hasil AnalisisKemas hasil pipeline menjadi ringkasan siap tampilkan.
Buka →