Front-End & Back-End Development 8
Mini Challenge
Selesaikan beberapa challenge berikut ini untuk mengukur pemahaman Anda mengenai beberapa materi yang sudah dipelajari dalam modul ini.
Challenge #1: CRUD Manual di MongoDB Compass
Pada tantangan pertama ini, Anda diminta berlatih melakukan operasi dasar CRUD (Create, Read, Update, Delete) secara manual menggunakan MongoDB Compass.
Langkah-langkah yang perlu Anda lakukan:
- Create — Masukkan lima produk kesehatan, misalnya vitamin, supplement, atau medical equipment.
- Read — Tampilkan produk dengan harga di bawah 100.000 menggunakan fitur filter.
- Update — Perbarui nilai stok pada salah satu produk.
- Delete — Hapus salah satu produk dari collection.
Jika Anda sudah akrab dengan CRUD, tantangan ini akan terasa sebagai langkah awal yang baik untuk memahami pola data di MongoDB.
Challenge #2: Membuat Database di Atlas melalui Compass
Pada tantangan kedua, Anda akan menghubungkan MongoDB Compass ke MongoDB Atlas, kemudian membuat struktur data secara langsung dari Compass.
Langkah-langkah yang perlu Anda lakukan adalah:
- Membuat database — Buat database baru bernama health-ecommerce-staging.
- Membuat collection — Buat collection bernama users.
- Menambahkan data — Tambahkan tiga dokumen user ke dalam collection tersebut.
- Verifikasi — Pastikan bahwa data tersebut muncul pada Atlas Web Dashboard.
Tantangan ini membantu Anda memahami integrasi antara Compass dan Atlas dalam pengelolaan database cloud.
Challenge #3: Complex Query
Tantangan ini mengajak Anda menulis query yang lebih kompleks menggunakan operator MongoDB untuk melakukan filter, sort, projection, dan limit.
Tujuan query:
- Menampilkan produk dengan kategori "Vitamin" atau "Supplement".
- Harga berada pada rentang 50.000 - 150.000.
- Mengurutkan hasil berdasarkan name dari A ke Z.
- Mengambil 5 hasil pertama.
- Menampilkan hanya field name, category, dan price.
Contoh struktur query:
db.products
.find(
{
$or: [{ category: "Vitamin" }, { category: "Supplement" }],
price: { $gte: 50000, $lte: 150000 },
},
{
name: 1,
category: 1,
price: 1,
_id: 0,
}
)
.sort({ name: 1 })
.limit(5);
Tantangan ini penting untuk memahami bagaimana melakukan pencarian data yang efisien dan terarah.
Challenge #4: Schema dengan Virtual & Middleware
Pada tantangan ini, Anda akan membuat User schema yang memanfaatkan fitur virtual dan middleware pada Mongoose.
Schema perlu memuat:
- Fields: firstName, lastName, email, password.
- Virtual: Bernama fullName yang menggabungkan firstName dan lastName.
- Middleware: Pre-save middleware untuk melakukan hashing pada password sebelum data disimpan.
- Timestamps: Untuk mencatat waktu pembuatan dan pembaruan dokumen.
Contoh Virtual:
userSchema.virtual("fullName").get(function () {
return `${this.firstName} ${this.lastName}`;
});
Dengan latihan ini, Anda akan memahami bagaimana mengelola data sebelum tersimpan secara otomatis melalui mekanisme yang disediakan Mongoose.
Challenge #5: Sales Report Aggregation
Pada tantangan ini, Anda akan membuat pipeline aggregation untuk menghasilkan laporan penjualan.
Tujuan pipeline:
- Menghitung total revenue per category berdasarkan rumus price x stock.
- Mengurutkan hasil berdasarkan revenue tertinggi ke terendah.
- Menambahkan field baru bernama percentage untuk menunjukkan persentase kontribusi revenue setiap kategori terhadap total revenue.
Tantangan ini membantu Anda memahami bagaimana aggregation dapat digunakan untuk analisis bisnis berbasis data.
Challenge #6: Optimasi Query dengan Index
Tantangan terakhir fokus pada optimasi kinerja query menggunakan index di MongoDB.
Langkah-langkah yang perlu Anda lakukan adalah:
- Compound Index — Membuat compound index untuk field category dan price.
- Text Index — Membuat text index pada field name dan description.
- Testing — Menguji performa query sebelum dan sesudah index dibuat.
- Analysis — Mengukur perbedaan performa menggunakan .explain("executionStats").
Dengan memahami cara kerja index, Anda dapat membuat query yang lebih cepat dan efisien, terutama pada dataset yang besar.
Health Products Database (MongoDB & Mongoose)
Tujuan Praktikum : Peserta mampu membangun dan mengelola database lengkap untuk sistem e-commerce produk kesehatan menggunakan MongoDB dan Mongoose. Peserta akan memahami konsep relasi antar koleksi, schema validation, serta penerapan CRUD operations, indexing, dan aggregation.
Deskripsi Singkat Aktivitas : Dalam praktikum ini, peserta akan membuat sistem database dari nol untuk aplikasi e-commerce. Aktivitas mencakup pembuatan struktur project, konfigurasi koneksi MongoDB, pembuatan model dengan validasi dan relasi (Products, Users, Reviews, Categories), serta implementasi service untuk CRUD dan analisis data.
Langkah-Langkah Praktikum
1. Setup Project
Clone starter project dari GitHub : Starter Project
Jalankan perintah npm install untuk menginstal dependensi.
2. Struktur Folder:
Pastikan struktur folder sesuai template (config, models, services, scripts).
health-products-database/
├── config/
│ └── database.js # MongoDB connection
├── models/
│ ├── Product.js # Product schema
│ ├── User.js # User schema
│ ├── Review.js # Review schema
│ └── Category.js # Category schema
├── services/
│ ├── productService.js # Product CRUD
│ ├── reviewService.js # Review CRUD
│ └── analyticsService.js # Aggregations
├── scripts/
│ └── seed.js # Database seeding
├── tests/
│ └── product.test.js # Tests (opsional)
├── .env
├── .gitignore
├── package.json
└── README.md
3. Setup Environment:
Buat file .env di root folder dan isi dengan konfigurasi berikut:
NODE_ENV=development
MONGODB_URI=mongodb://localhost:27017/health-products
4. Setup Database Connection:
Buat file config/database.js.
// config/database.js
require("dotenv").config();
const mongoose = require("mongoose");
const connectDB = async () => {
try {
await mongoose.connect(process.env.MONGODB_URI);
console.log("MongoDB connected successfully");
} catch (error) {
console.error("Connection error:", error.message);
process.exit(1);
}
};
module.exports = connectDB;
5. Implementasi Models:
- Buat schema untuk Product, User, Review, dan Category dengan validasi
- Tambahkan Relasi relasi:
- Review mengacu pada Product dan User.
- Product memiliki relasi many-to-many ke Category.
6. Implementasi Services:
- Buat productService.js untuk CRUD produk.
- Buat reviewService.js untuk CRUD ulasan.
- Buat analyticsService.js untuk fungsi aggregation (contoh: rata-rata rating).
7. Seed Data Awal:
Jalankan perintah:
node scripts/seed.js
Output yang diharapkan
MongoDB connected successfully
Existing data removed
10 products inserted successfully
Database seeding completed!
8. Verifikasi
Pastikan koneksi berhasil.
Periksa isi koleksi dengan MongoDB Compass atau terminal:
mongo
use health-products
db.products.find()
Tools & Resource yang Dibutuhkan
- Visual Studio Code
- Node.js dan npm
- MongoDB (Local atau Atlas)
- Mongoose ORM
- Dotenv
- GitHub repository:
- Starter Project https://github.com/agusnurwanto/komdigi-fsd-intermediate-modul-2-backend-health-ecommerce-database-starter
- Readme Project
Contoh Output atau Hasil Akhir
- Struktur folder project lengkap dengan file konfigurasi dan model.
- Koneksi database MongoDB berhasil (Log: "MongoDB connected successfully").
- Koleksi products, users, reviews, dan categories terisi sesuai skema.
- Fungsi CRUD pada service berjalan dengan baik.
- Script seeding berhasil menambahkan data contoh ke database.
- Fungsi aggregation menghasilkan analisis sederhana (misal: rata-rata harga/rating).
Kriteria Keberhasilan / Penilaian Mandiri
- Koneksi MongoDB berhasil tanpa error
- Seluruh schema memiliki validasi yang tepat
- Relasi antar koleksi berjalan (Review ↔ User, Product ↔ Category)
- CRUD berfungsi pada seluruh koleksi
- Indexing diimplementasikan pada field pencarian
- Aggregation menghasilkan data analitik yang benar
- Script seeding berjalan dengan output sesuai harapan
Petunjuk Troubleshooting
- Jika koneksi MongoDB gagal, pastikan service MongoDB berjalan dan URI sesuai di .env.
- Jika data tidak muncul, periksa log dari seed.js untuk memastikan proses insert berjalan.
- Jika CRUD error, pastikan referensi antar koleksi (ref) di schema sudah benar.
- Untuk performance issue, gunakan indexing di field yang sering digunakan untuk pencarian (misal: name, category).
Durasi Praktik Disarankan: 60–90 menit.
Aksi Lanjutan atau Refleksi (Opsional): Gunakan modul "Database Fundamentals with Mongoose" untuk referensi ulang konsep schema.
Kuis
Soal 1
Apa yang dimaksud dengan Schema dalam Mongoose?
a. Struktur atau blueprint yang mendefinisikan bentuk dokumen
b. Hasil query dari database
c. Koneksi ke server MongoDB
d. Data yang tersimpan di database
Jawab: A
Soal 2
Jika ingin menambahkan banyak dokumen sekaligus, metode apa yang digunakan?
a. db.collection.addAll()
b. db.collection.saveMany()
c. db.collection.bulkWrite()
d. db.collection.insertMany()
Jawab: D
Soal 3
Manakah dari berikut ini yang merupakan contoh database NoSQL?
a. MySQL
b. Oracle
c. PostgreSQL
d. MongoDB
Jawab: D
Soal 4
Jika ingin membuat pipeline analytics produk per kategori yang menampilkan jumlah produk, rata-rata harga, total stok, dan rentang harga dalam format “Rp min - Rp max”, urutan stage yang paling tepat adalah…
a. $group → $match → $sort → $project
b. $match → $group → $addFields → $sort → $project
c. $lookup → $match → $group → $addFields
d. $project → $match → $group → $sort
Jawab: B
Soal 5
Metode apa yang digunakan untuk memperbarui satu dokumen saja?
a. db.collection.updateMany()
b. db.collection.changeOne()
c. db.collection.updateOne()
d. db.collection.modify()
Jawab: C
Soal 6
Bagaimana cara mendefinisikan tipe data String pada Schema Mongoose?
a. name: text
b. name: { type: "text" }
c. name: String
d. name: "String"
Jawab: C
Soal 7
Sebuah tim ingin menambahkan field discountedPrice yang dihitung otomatis dari price dan discount, tetapi tidak ingin menyimpannya ke database. Solusi terbaik adalah menggunakan…
a. Default value
b. Enum validation
c. Virtual property
d. Middleware post-save
Jawab: C
Soal 8
Bagaimana cara membuat Model dari sebuah Schema bernama userSchema?
a. const User = mongoose.model('User', userSchema);
b. const User = mongoose.create('User', userSchema);
c. const User = mongoose.table('User', userSchema);
d. const User = new Schema('User', userSchema);
Jawab: A
Soal 9
Bagaimana cara membuat database baru di MongoDB menggunakan perintah use?
a. new db nama_db
b. create database nama_db
c. use nama_db (dan insert data)
d. make nama_db
Jawab: C
Jawab: C
Soal 10
Apa itu MongoDB Atlas?
a. Aplikasi desktop untuk membuat database lokal
b. Versi cloud dari MongoDB yang memungkinkan pengelolaan database secara online
c. Framework JavaScript untuk mengelola database
d. Plugin tambahan untuk MongoDB Compass
Jawab: B
Komentar
Posting Komentar