Saat Anda bekerja dengan MongoDB, terutama sebagai pengembang yang berasal dari latar belakang basis data relasional, salah satu hal pertama yang akan Anda perhatikan adalah betapa fleksibelnya desain skema.
Koleksi di MongoDB tidak perlu dibuat secara eksplisit terlebih dahulu, namun ada kalanya masuk akal untuk mendefinisikannya secara eksplisit dan mengonfigurasinya dengan cermat.
Dalam artikel ini, kita akan melihat bagaimana dan kapan Anda mungkin ingin membuat koleksi di MongoDB, beberapa opsi konfigurasi utama yang perlu dipertimbangkan, serta beberapa contoh kode dalam JS dan C# (favorit saya).
Jangan khawatir, kami memiliki banyak paritas fitur di seluruh driver, jadi banyak hal yang Anda lihat di sini akan dimungkinkan dalam <insert your language of choice>.
Jika Anda baru mengenal basis data NoSQL, pertimbangkan untuk memulai dengan Introduction to NoSQL.
Apa Itu Koleksi MongoDB?
Sebelum kita melihat cara membuat koleksi, mari kita bahas secara singkat apa sebenarnya koleksi itu.
Jika Anda berasal dari latar belakang SQL, Anda mungkin terbiasa mendengar tentang tabel, baris, dan kolom. Di MongoDB, istilahnya sedikit berbeda. Alih-alih tabel, kita memiliki koleksi, dan alih-alih baris, kita memiliki dokumen dengan field, bukan kolom.
Salah satu keunggulan MongoDB adalah skema yang dinamis. Artinya, Anda tidak perlu membuat koleksi secara manual sebelum menggunakannya. Jika Anda memasukkan sebuah dokumen ke dalam koleksi yang belum ada, MongoDB akan membuatnya secara otomatis. Misalnya, jika Anda menjalankan:
db.movies.insertOne({ title: "The Matrix", year: 1999 });
Perintah ini akan mencoba memasukkan satu dokumen untuk film “The Matrix” ke dalam koleksi movies. Jika sudah ada, dokumen akan ditambahkan ke koleksi tersebut. Jika belum ada, koleksi movies akan dibuat sebelum dokumen baru ditambahkan.
Anda juga dapat menambahkan banyak dokumen sekaligus, menggunakan insertMany alih-alih insertOne.
Kapan Perlu Mendefinisikan Koleksi MongoDB Secara Eksplisit
Meskipun Anda dapat membiarkan MongoDB menangani pembuatan koleksi secara otomatis, ada alasan bagus untuk mendefinisikan koleksi terlebih dahulu, terutama dalam skenario produksi. Membuat koleksi secara eksplisit memberi Anda kesempatan untuk:
Menyiapkan aturan validasi untuk menerapkan batasan pada skema Anda.
Menerapkan indeks bawaan tertentu seperti time-to-live (TTL). Indeks pada field tanggal ini akan otomatis menghapus dokumen di koleksi Anda berdasarkan jangka waktu yang Anda tentukan.
Mengoptimalkan untuk beban kerja tulis yang tinggi dengan melakukan pra-ukuran koleksi.
db.createCollection("auditLogs",{capped:true,size:10485760,// 10 MBmax:1000});Didukung oleh
Atau dengan validasi:
db.createCollection("users",{validator:{$jsonSchema:{bsonType:"object",required:["email","createdAt"],properties:{email:{bsonType:"string",pattern:"^.+@.+$"},createdAt:{bsonType:"date"}}}}});Didukung oleh
Meski MongoDB mendukung skema yang fleksibel, Anda tetap mungkin ingin menambahkan aturan validasi seperti field wajib atau menentukan properti pada field tertentu, misalnya tipe data atau pemformatan untuk email, seperti terlihat di atas. Ini diperlukan jika Anda ingin memastikan dokumen Anda mengikuti skema tertentu.
Penerapan skema akan terasa familiar jika Anda berasal dari latar belakang SQL, dan bahkan jika tidak, terkadang aplikasi Anda di produksi perlu memiliki bentuk dokumen yang dapat diprediksi. Jadi validasi sangat cocok untuk hal ini!
Membuat Koleksi MongoDB dengan C# Driver
Dalam aplikasi C#, Anda juga dapat membuat koleksi secara eksplisit menggunakan driver MongoDB. Meskipun tidak diperlukan untuk operasi dasar, di sinilah Anda dapat menetapkan opsi tingkat lanjut secara terprogram.
var options =newCreateCollectionOptions{
Capped =true,
MaxSize =10485760,// 10 MB
MaxDocuments =1000};await database.CreateCollectionAsync("auditLogs", options);Didukung oleh
Untuk menambahkan validator:
var validator =newBsonDocument{{"$jsonSchema",newBsonDocument{{"bsonType","object"},{"required",newBsonArray{"email","createdAt"}},{"properties",newBsonDocument{{"email",newBsonDocument{{"bsonType","string"},{"pattern","^.+@.+$"}}},{"createdAt",newBsonDocument{{"bsonType","date"}}}}}}}};var collectionOptions =newCreateCollectionOptions<BsonDocument>{
Validator =newBsonDocumentFilterDefinition<BsonDocument>(validator)};await database.CreateCollectionAsync("users", collectionOptions);Didukung oleh
Opsi Konfigurasi Koleksi Kunci yang Perlu Diketahui
Saat membuat koleksi secara eksplisit, berikut beberapa opsi yang perlu Anda ketahui:
capped: membuat koleksi berukuran tetap
size: ukuran maksimum dalam byte untuk capped collection
max: jumlah maksimum dokumen yang diizinkan
validator: objek JSON dalam sintaks skema yang mendefinisikan validasi skema
expireAfterSeconds: digunakan dengan indeks TTL untuk menangani penghapusan otomatis dokumen
Anda juga dapat menerapkan indeks pada saat pembuatan atau sesaat setelahnya. MongoDB tidak akan otomatis membuat indeks kecuali diperlukan untuk _id.
Indeks di MongoDB memungkinkan Anda meningkatkan kinerja pada field yang paling sering diakses. Nilai-nilai tersebut akan di-cache di memori, artinya tidak ada panggilan ke hard drive untuk mengambilnya, yang dapat menghemat banyak waktu dan meningkatkan kinerja saat diakses secara rutin.
Praktik Terbaik untuk Mendefinisikan Koleksi MongoDB
Berikut beberapa panduan untuk membantu Anda memutuskan kapan harus mendefinisikan koleksi secara eksplisit:
Pembuatan implisit untuk proof of concept yang cepat atau pengembangan lokal, atau ketika pengguna akhir dapat menghasilkan konten secara dinamis
Pembuatan eksplisit ketika Anda ingin menerapkan validasi atau menerapkan pengaturan untuk pengindeksan atau kinerja
Kesimpulan
MongoDB dikenal dengan skema yang fleksibel yang memberi kita keleluasaan dalam menyusun data, termasuk bagaimana kita membuat dan mengelola koleksi. Meskipun pembuatan implisit cepat dan nyaman, definisi koleksi secara eksplisit membuka fitur-fitur kuat seperti validasi skema, perilaku capped, dan penyesuaian kinerja.
Seperti biasa, MongoDB Atlas membuat pengelolaan koleksi menjadi lebih mudah dengan alat berbasis UI, otomatisasi, dan wawasan kinerja bawaan. Dan jika Anda bekerja di .NET, C# driver siap membantu dengan model bertipe kuat dan API yang fasih.
Saat mempertimbangkan praktik terbaik untuk mendefinisikan koleksi MongoDB, memahami prinsip desain basis data fundamental juga dapat bermanfaat.
Selamat ngoding! Semoga koleksi Anda cepat, valid, dan terindeks dengan baik!
FAQs
Apa perbedaan antara pembuatan koleksi implisit dan eksplisit di MongoDB?⌄
Pembuatan implisit: MongoDB secara otomatis membuat koleksi saat Anda menyisipkan dokumen ke koleksi yang belum ada. Ini berguna untuk prototyping cepat atau pengembangan.
Pembuatan eksplisit: Anda mendefinisikan koleksi secara manual sebelum menggunakannya, sering kali untuk mengonfigurasi pengaturan lanjutan seperti aturan validasi, ukuran capped, atau pengindeksan. Ini direkomendasikan untuk lingkungan produksi.
Kapan saya harus membuat koleksi secara eksplisit alih-alih membiarkan MongoDB membuatnya secara otomatis?⌄
Anda harus membuat koleksi secara eksplisit ketika: validasi skema, capped collection, pengoptimalan kinerja, dan indeks bawaan.
Bagaimana saya menerapkan skema di MongoDB jika sifatnya tanpa skema?⌄
MongoDB mendukung validasi skema JSON, yang memungkinkan Anda mendefinisikan aturan untuk struktur dokumen.
Apa itu capped collection, dan kapan saya harus menggunakannya?⌄
Capped collection adalah koleksi berukuran tetap yang secara otomatis menimpa dokumen lama saat penuh.
Bagaimana cara membuat koleksi dengan indeks TTL (Time-To-Live)?⌄
Indeks TTL secara otomatis menghapus dokumen setelah waktu yang ditentukan. Pertama, buat koleksinya, lalu tambahkan indeks.
Luce Carter adalah Senior Developer Advocate di MongoDB, Microsoft MVP, Contentful Dev Hero, penulis Beginning MongoDB Atlas with .NET, serta pencinta kode, sinar matahari, dan belajar.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Dalam kursus konseptual ini (tidak memerlukan pemrograman), Anda akan mempelajari empat jenis utama basis data NoSQL dan mesin-mesin populer yang digunakan.
Saat Anda bekerja dengan MongoDB, terutama sebagai pengembang yang berasal dari latar belakang basis data relasional, salah satu hal pertama yang akan Anda perhatikan adalah betapa fleksibelnya desain skema.
Koleksi di MongoDB tidak perlu dibuat secara eksplisit terlebih dahulu, namun ada kalanya masuk akal untuk mendefinisikannya secara eksplisit dan mengonfigurasinya dengan cermat.
Dalam artikel ini, kita akan melihat bagaimana dan kapan Anda mungkin ingin membuat koleksi di MongoDB, beberapa opsi konfigurasi utama yang perlu dipertimbangkan, serta beberapa contoh kode dalam JS dan C# (favorit saya).
Jangan khawatir, kami memiliki banyak paritas fitur di seluruh driver, jadi banyak hal yang Anda lihat di sini akan dimungkinkan dalam <insert your language of choice>.
Jika Anda baru mengenal basis data NoSQL, pertimbangkan untuk memulai dengan Introduction to NoSQL.
Apa Itu Koleksi MongoDB?
Sebelum kita melihat cara membuat koleksi, mari kita bahas secara singkat apa sebenarnya koleksi itu.
Jika Anda berasal dari latar belakang SQL, Anda mungkin terbiasa mendengar tentang tabel, baris, dan kolom. Di MongoDB, istilahnya sedikit berbeda. Alih-alih tabel, kita memiliki koleksi, dan alih-alih baris, kita memiliki dokumen dengan field, bukan kolom.
Salah satu keunggulan MongoDB adalah skema yang dinamis. Artinya, Anda tidak perlu membuat koleksi secara manual sebelum menggunakannya. Jika Anda memasukkan sebuah dokumen ke dalam koleksi yang belum ada, MongoDB akan membuatnya secara otomatis. Misalnya, jika Anda menjalankan:
db.movies.insertOne({ title: "The Matrix", year: 1999 });Perintah ini akan mencoba memasukkan satu dokumen untuk film “The Matrix” ke dalam koleksi
movies. Jika sudah ada, dokumen akan ditambahkan ke koleksi tersebut. Jika belum ada, koleksimoviesakan dibuat sebelum dokumen baru ditambahkan.Anda juga dapat menambahkan banyak dokumen sekaligus, menggunakan
insertManyalih-alihinsertOne.Kapan Perlu Mendefinisikan Koleksi MongoDB Secara Eksplisit
Meskipun Anda dapat membiarkan MongoDB menangani pembuatan koleksi secara otomatis, ada alasan bagus untuk mendefinisikan koleksi terlebih dahulu, terutama dalam skenario produksi. Membuat koleksi secara eksplisit memberi Anda kesempatan untuk:
Berikut cara Anda membuat koleksi di MongoDB Shell:
Atau dengan validasi:
Meski MongoDB mendukung skema yang fleksibel, Anda tetap mungkin ingin menambahkan aturan validasi seperti field wajib atau menentukan properti pada field tertentu, misalnya tipe data atau pemformatan untuk email, seperti terlihat di atas. Ini diperlukan jika Anda ingin memastikan dokumen Anda mengikuti skema tertentu.
Penerapan skema akan terasa familiar jika Anda berasal dari latar belakang SQL, dan bahkan jika tidak, terkadang aplikasi Anda di produksi perlu memiliki bentuk dokumen yang dapat diprediksi. Jadi validasi sangat cocok untuk hal ini!
Membuat Koleksi MongoDB dengan C# Driver
Dalam aplikasi C#, Anda juga dapat membuat koleksi secara eksplisit menggunakan driver MongoDB. Meskipun tidak diperlukan untuk operasi dasar, di sinilah Anda dapat menetapkan opsi tingkat lanjut secara terprogram.
Untuk menambahkan validator:
Untuk pengembang Python, tutorial Introduction to MongoDB and Python adalah sumber yang sangat baik.
Opsi Konfigurasi Koleksi Kunci yang Perlu Diketahui
Saat membuat koleksi secara eksplisit, berikut beberapa opsi yang perlu Anda ketahui:
capped: membuat koleksi berukuran tetapsize: ukuran maksimum dalam byte untuk capped collectionmax: jumlah maksimum dokumen yang diizinkanvalidator: objek JSON dalam sintaks skema yang mendefinisikan validasi skemaexpireAfterSeconds: digunakan dengan indeks TTL untuk menangani penghapusan otomatis dokumenAnda juga dapat menerapkan indeks pada saat pembuatan atau sesaat setelahnya. MongoDB tidak akan otomatis membuat indeks kecuali diperlukan untuk
_id.Indeks di MongoDB memungkinkan Anda meningkatkan kinerja pada field yang paling sering diakses. Nilai-nilai tersebut akan di-cache di memori, artinya tidak ada panggilan ke hard drive untuk mengambilnya, yang dapat menghemat banyak waktu dan meningkatkan kinerja saat diakses secara rutin.
Praktik Terbaik untuk Mendefinisikan Koleksi MongoDB
Berikut beberapa panduan untuk membantu Anda memutuskan kapan harus mendefinisikan koleksi secara eksplisit:
Kesimpulan
MongoDB dikenal dengan skema yang fleksibel yang memberi kita keleluasaan dalam menyusun data, termasuk bagaimana kita membuat dan mengelola koleksi. Meskipun pembuatan implisit cepat dan nyaman, definisi koleksi secara eksplisit membuka fitur-fitur kuat seperti validasi skema, perilaku capped, dan penyesuaian kinerja.
Seperti biasa, MongoDB Atlas membuat pengelolaan koleksi menjadi lebih mudah dengan alat berbasis UI, otomatisasi, dan wawasan kinerja bawaan. Dan jika Anda bekerja di .NET, C# driver siap membantu dengan model bertipe kuat dan API yang fasih.
Saat mempertimbangkan praktik terbaik untuk mendefinisikan koleksi MongoDB, memahami prinsip desain basis data fundamental juga dapat bermanfaat.
Selamat ngoding! Semoga koleksi Anda cepat, valid, dan terindeks dengan baik!