MongoDB - Pengindeksan Tingkat Lanjut

Hai teman-teman, para penggemar basis data yang bersemangat! Hari ini, kita akan meluncur ke dalam dunia menarik pengindeksan tingkat lanjut di MongoDB. Jangan khawatir jika Anda baru belajar pemrograman; saya akan memandu Anda melalui setiap konsep step-by-step, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil secangkir minuman favorit Anda, dan mari kita mulai perjalanan ini bersama!

MongoDB - Advanced Indexing

Pengindeksan Field Array

Bayangkan Anda sedang mengatur sebuah pustaka besar. Anda memiliki rak-rak penuh buku, tapi bagaimana Anda menemukan buku yang Anda inginkan secara cepat? Itu adalah tempat pengindeksan memainkan perannya. Dalam MongoDB, pengindeksan field array adalah seperti membuat katalog khusus untuk buku-buku dengan banyak penulis atau genre.

Pengindeksan Array Dasar

mari kita mulai dengan contoh sederhana. Misalkan kita memiliki sebuah 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 secara cepat berdasarkan penulis manapun. Mari kita coba sebuah query:

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

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

Multikey Index

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

Pengindeksan Array Tertanam

Sekarang, mari kita menjadi sedikit 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 secara cepat berdasarkan judul bab mereka:

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

Pengindeksan Field Sub-Dokumen

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

Pengindeksan Sub-Dokumen Dasar

mari kita pertimbangkan sebuah koleksi murid 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 murid 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. Misalkan kita sering mencari murid berdasarkan kota dan kode pos:

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

Indeks komposit ini memungkinkan query efisien seperti:

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

Pengindeksan Array Bersarang

Sekarang, mari kita mengatasi sebuah scenario yang lebih menantang. Bayangkan kita memiliki sebuah koleksi sekolah, masing-masing memiliki beberapa kelas, dan setiap kelas memiliki beberapa murid:

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 murid di seluruh kelas:

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

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

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

Teknik Pengindeksan Tingkat Lanjut

mari kitaakhiri dengan tabel yang menggabungkan beberapa teknik pengindeksan tingkat lanjut yang kita bahas dan beberapa lagi:

Teknik Deskripsi Contoh
Multikey Index 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, pengindeksan adalah alat yang kuat, tetapi itu datang dengan biaya. Setiap indeks memakan ruang dan memperlambat operasi tulis. Itu seperti menambahkan lebih banyak katalog ke pustaka kita - membantu mencari buku, tetapi memerlukan waktu untuk memperbarui mereka saat buku baru datang.

Saat kita mengakhiri pelajaran ini, saya teringat tentang seorang murid yang pernah bertanya, "Professor, bukan pengindeksan hanya seperti membuat lembar jawaban untuk ujian?" Dan Anda tahu apa? Itu bukanlah analogi yang buruk! Indeks adalah seperti lembar jawaban untuk basis data Anda, membantu nya menemukan informasi yang diperlukan secara cepat.

Terus latih, tetap curiga, dan selamat pengindeksan!

Credits: Image by storyset