MongoDB - Indeksing Lanjut

Hai sana, penggemar basis data yang bersemangat! Hari ini, kita akan memantulkan dunia yang menarik dari indeksing lanjut di MongoDB. Jangan khawatir jika Anda baru dalam programming; saya akan mengarahkan Anda melalui setiap konsep langkah demi langkah, seperti yang saya lakukan untuk ribuan siswa selama tahun-tahun mengajar saya. Jadi, ambil secangkir minuman favorit Anda, dan mari kita mulai perjalanan ini bersama!

MongoDB - Advanced Indexing

Indeksing Field Array

Bayangkan Anda sedang mengatur perpustakaan yang besar. Anda memiliki rak-rak penuh buku, tapi bagaimana Anda menemukan buku yang Anda inginkan dengan cepat? Itu adalah tempat indeksing berperan. Di MongoDB, indeksing field array adalah seperti membuat katalog khusus untuk buku dengan beberapa penulis atau genre.

Indeksing Array Dasar

mari mulai dengan contoh sederhana. Anggaplah kita memiliki koleksi buku, dan setiap buku dapat memiliki beberapa penulis.

db.books.insertMany([
{ title: "The Great Adventure", authors: ["John Doe", "Jane Smith"] },
{ title: "Mystery Island", authors: ["Jane Smith"] },
{ title: "Cooking Masterclass", authors: ["Chef Gordon", "Chef Julia"] }
])

Untuk membuat indeks pada field array authors, kita gunakan:

db.books.createIndex({ authors: 1 })

Indeks ini memungkinkan kita mencari buku dengan cepat oleh salah satu penulisnya. mari coba sebuah query:

db.books.find({ authors: "Jane Smith" })

Query ini akan secara efisien mengembalikan "The Great Adventure" dan "Mystery Island" karena Jane Smith adalah penulis dari kedua buku tersebut.

Indeks Multikey

Apa yang kita buat adalah jenis indeks multikey. MongoDB secara otomatis membuat jenis indeks ini ketika Anda mengindeks field array. Itu seperti membuat entri katalog terpisah untuk setiap penulis setiap buku.

Indeksing Array嵌入式

Sekarang, mari kita membuat lebih kompleks. Apa bila kita ingin mengindeks buku berdasarkan bab mereka?

db.books.insertOne({
title: "Learn MongoDB",
chapters: [
{ number: 1, title: "Introduction", pages: 20 },
{ number: 2, title: "Basic CRUD Operations", pages: 30 },
{ number: 3, title: "Indexing", pages: 25 }
]
})

Kita dapat membuat indeks pada judul bab:

db.books.createIndex({ "chapters.title": 1 })

Ini memungkinkan kita mencari buku berdasarkan judul bab mereka:

db.books.find({ "chapters.title": "Indexing" })

Indeksing Field Sub-Dokumen

Indeksing sub-dokumen adalah seperti membuat katalog untuk buku berdasarkan informasi detil mereka. Ini sangat berguna ketika Anda memiliki struktur data yang kompleks dan bersarang.

Indeksing Sub-Dokumen Dasar

mari perhatikan sebuah koleksi siswa dengan informasi alamat:

db.students.insertMany([
{
name: "Alice",
address: { city: "New York", zipcode: "10001" }
},
{
name: "Bob",
address: { city: "Los Angeles", zipcode: "90001" }
}
])

Untuk membuat indeks pada field city dalam sub-dokumen address:

db.students.createIndex({ "address.city": 1 })

Sekarang kita dapat mencari siswa secara efisien berdasarkan kota:

db.students.find({ "address.city": "New York" })

Indeks Komposit pada Sub-Dokumen

kadang-kadang, kita ingin mengindeks beberapa field dalam sub-dokumen. mari katakan kita sering mencari siswa berdasarkan kota dan kode pos:

db.students.createIndex({ "address.city": 1, "address.zipcode": 1 })

Indeks komposit ini memungkinkan query yang efisien seperti:

db.students.find({ "address.city": "New York", "address.zipcode": "10001" })

Indeksing Array Bersarang

Sekarang, mari kita hadapi kasus yang lebih menantang. Bayangkan kita memiliki koleksi sekolah, masing-masing dengan beberapa kelas, dan setiap kelas dengan beberapa siswa:

db.schools.insertOne({
name: "Sunshine Elementary",
classes: [
{
name: "Class 1A",
students: [
{ name: "Alice", grade: "A" },
{ name: "Bob", grade: "B" }
]
},
{
name: "Class 1B",
students: [
{ name: "Charlie", grade: "A" },
{ name: "David", grade: "C" }
]
}
]
})

Untuk mengindeks nilai siswa di seluruh kelas:

db.schools.createIndex({ "classes.students.grade": 1 })

Ini memungkinkan query yang efisien seperti mencari semua sekolah dengan siswa nilai "A":

db.schools.find({ "classes.students.grade": "A" })

Teknik Indeksing Lanjut

mariakhiri dengan tabel yang menggabungkan beberapa teknik indeksing lanjut yang kita pelajari dan beberapa lagi:

Teknik Deskripsi Contoh
Indeks Multikey Secara otomatis dibuat untuk field array db.books.createIndex({ authors: 1 })
Indeks Komposit Indeks pada beberapa field db.students.createIndex({ "address.city": 1, "address.zipcode": 1 })
Indeks Teks Memungkinkan query pencarian teks db.articles.createIndex({ content: "text" })
Indeks Hashed Mengindeks hash nilai field db.users.createIndex({ username: "hashed" })
Indeks Wildcard Secara dinamis mengindeks field yang cocok dengan pola tertentu db.products.createIndex({ "details.$**": 1 })

Ingat, teman-teman, indeksing adalah alat yang kuat, tetapi itu datang dengan biaya. Setiap indeks mengambil ruang dan memperlambat operasi tulis. Itu seperti menambahkan lebih banyak katalog ke perpustakaan kita - membantu mencari buku, tetapi memerlukan waktu untuk memperbarui mereka saat buku baru datang.

Saat kita mengakhiri pelajaran ini, saya teringat tentang siswa yang pernah bertanya, "Professor, bukanlah indeksing seperti membuat cheat sheet untuk ujian?" Dan Anda tahu apa? Itu bukanlah analogi yang buruk! Indeks adalah seperti cheat sheet bagi basis data Anda, membantunya menemukan informasi yang dibutuhkan secara cepat.

Tetap berlatih, tetap curiga, dan indexing yang menyenangkan!

Credits: Image by storyset