Server MongoDB menata data dalam dua lapis wadah. Lapis terluar adalah basis data yang menjadi lingkup kerja paling besar, sedangkan di dalamnya terdapat koleksi, yaitu wadah dokumen yang sejenis. Topik ini membahas hierarki kedua wadah tersebut, aturan penamaannya, dan perilaku pembuatan implisit yang membuat struktur muncul begitu data pertama ditulis. Setelah membacanya, penataan data akademik ke dalam basis data dan koleksi dapat direncanakan secara sadar.
Hierarki basis data dan koleksi#
Satu proses server MongoDB mengelola lebih dari satu basis data pada waktu yang sama. Basis data menjadi lingkup pemisahan yang paling besar, misalnya satu basis data untuk aplikasi akademik dan satu lagi untuk aplikasi keuangan. Di dalam satu basis data, dokumen dikelompokkan ke dalam koleksi, dan setiap koleksi lazim memuat dokumen dengan struktur yang serupa, misalnya koleksi mahasiswa untuk data mahasiswa. Susunan ini menyerupai pasangan basis data dan tabel pada model relasional, tetapi koleksi tidak mewajibkan kolom yang seragam karena isinya berupa dokumen bebas.
Perintah use akademik pada blok berikut menetapkan basis data aktif, sedangkan sisipan pertama menyimpan satu dokumen. Sebelum blok itu dijalankan, basis data akademik beserta koleksinya belum ada sama sekali di server.
use akademik
db.mahasiswa.insertOne({ nama: "Ali", usia: 20 })switched to db akademik
{
acknowledged: true,
insertedId: ObjectId('6ae8751e93aa58bb76ce5f47')
}Pesan switched to db akademik menandakan konteks berpindah, sedangkan balasan sisipan menandakan dokumen tersimpan. Dua perintah bantu navigasi kemudian memeriksa hasilnya, yaitu db yang mencetak nama basis data aktif dan show collections yang mencantumkan koleksi di dalamnya.
db
show collectionsakademik
mahasiswaKeluaran db berupa akademik, sedangkan show collections hanya menampilkan satu koleksi bernama mahasiswa. Kedua struktur itu baru tersimpan karena sisipan sudah berlangsung. Perilaku ini menjadi rujukan sepanjang topik, yaitu server menyimpan struktur hanya setelah ada data yang dituliskan ke dalamnya.
Pembuatan implisit dan eksplisit#
MongoDB tidak menuntut perintah pembuatan struktur sebelum data ditulis. Jalur pertama adalah pembuatan implisit, yaitu sisipan pertama ke sebuah koleksi sekaligus menciptakan koleksi tersebut. Apabila basis data tempat koleksi itu berada juga belum ada, basis data itu ikut diciptakan. Jalur kedua adalah pembuatan eksplisit melalui db.createCollection, yang menciptakan koleksi kosong lebih dahulu dan menyediakan opsi tambahan seperti batas ukuran atau aturan validasi. Kedua jalur menghasilkan koleksi yang sifatnya sama pada akhirnya.
Blok berikut memakai kedua jalur pada basis data yang sama. Koleksi dosen diciptakan secara eksplisit tanpa dokumen, sedangkan sisipan ke ruang menciptakan koleksinya secara implisit.
db.createCollection("dosen")
db.ruang.insertOne({ kode: "R-101", kapasitas: 40 })
show collections{ ok: 1 }
{
acknowledged: true,
insertedId: ObjectId('6ae8751e93aa58bb76ce5f48')
}
dosen
mahasiswa
ruangBalasan createCollection berupa { ok: 1 } tanpa ObjectId karena tidak ada dokumen yang disisipkan. Daftar pada keluaran show collections memuat ketiga koleksi, termasuk dosen yang masih kosong. Pembuatan eksplisit dipilih ketika koleksi memerlukan opsi khusus atau ketika keberadaan koleksi kosong ingin dipastikan sejak awal, misalnya sebagai bagian dari penyiapan aplikasi.
Pembuatan implisit juga berlaku pada tahap selanjutnya. Koleksi tidak menolak dokumen yang strukturnya berbeda dari dokumen pendahulunya. Field baru muncul begitu dokumen pertama yang membawanya disisipkan. Sifat ini menegaskan bahwa bentuk struktur pada MongoDB mengikuti data, bukan sebaliknya.
Aturan penamaan#
Nama basis data dan nama koleksi tunduk pada aturan penamaan yang ditetapkan manual MongoDB. Aspek yang paling sering menimbulkan masalah adalah karakter terlarang, sensitivitas huruf kapital, dan panjang maksimum. Tabel berikut merangkum ketentuannya untuk kedua lapis.
| Ketentuan | Nama basis data | Nama koleksi |
|---|---|---|
| Karakter terlarang | /, \, . (titik), ", $, dan karakter null pada sistem Unix | $, karakter null, dan awalan system. |
| Huruf kapital | Jangan diandalkan untuk membedakan nama, sehingga akademik dan Akademik tidak dapat hidup berdampingan | Peka huruf kapital, sehingga Mahasiswa dan mahasiswa menjadi dua koleksi |
| Panjang maksimum | Kurang dari 64 byte | Namespace basisdata.koleksi hingga 255 byte |
| Karakter awal | Tanpa ketentuan khusus | Sebaiknya diawali huruf atau garis bawah |
Daftar karakter terlarang basis data pada tabel berlaku untuk sistem Unix dan Linux, sedangkan pemasangan pada Windows menambahkan sejumlah karakter lain seperti *, <, >, :, |, dan ?. Nama koleksi boleh memuat huruf kapital tanpa larangan apa pun, tetapi nama yang berbeda kapitalisasi tetap dihitung dua koleksi yang berbeda. Satu huruf kapital yang salah ketik menghasilkan koleksi baru yang tampil normal pada keluaran, dan kesalahan semacam ini dibahas pada bagian Kesalahan umum. Batas panjang juga dihitung secara gabungan, yaitu 255 byte diukur atas nama basis data, tanda titik, dan nama koleksinya.
Server menangani perbedaan huruf kapital pada nama basis data lebih tegas daripada pada nama koleksi. Server tidak mengizinkan dua basis data yang hanya berbeda kapitalisasi, sehingga penulisan Akademik pada server yang sudah memuat basis data akademik ditolak saat penulisan pertama. Blok berikut memperlihatkan penolakan tersebut.
db.getSiblingDB("Akademik").dosen.insertOne({ nama: "Rina" })Uncaught
MongoServerError: db already exists with different case already have: [akademik] trying to create [Akademik]Pesan error memuat kedua nama yang berkonflik, yaitu akademik yang sudah ada dan Akademik yang dicoba dibuat. Pembacaan melalui nama yang berbeda kapitalisasi juga tidak mengembalikan isi basis data aslinya. Perilaku ini menegaskan bahwa kapitalisasi tidak dapat dijadikan pembeda nama basis data pada server mana pun.
Praktik yang aman adalah menyeragamkan penamaan sejak awal, misalnya seluruh nama basis data dan koleksi ditulis huruf kecil dengan pemisah garis bawah. Nama yang seragam menghilangkan kebutuhan mengingat kapitalisasi dan tetap dapat ditulis lewat notasi titik. Apabila nama dengan karakter khusus benar-benar diperlukan, keputusan itu sebaiknya ditetapkan sekali sebagai kesepakatan aplikasi, bukan dipilih secara spontan saat mengetik query.
Mengakses koleksi dengan nama khusus#
Penulisan db.mahasiswa pada blok-blok sebelumnya adalah akses properti JavaScript, sehingga mongosh menafsirkannya sebagai koleksi bernama mahasiswa pada basis data aktif. Konsekuensinya muncul pada nama yang memuat tanda titik. mongosh menafsirkan db.nilai.tambahan sebagai koleksi bernama nilai.tambahan, bukan field tambahan pada koleksi nilai.
Nama yang diawali angka atau memuat tanda hubung tidak dapat ditulis lewat notasi titik karena JavaScript membacanya sebagai ekspresi, misalnya db.2026-ujian dibaca sebagai pengurangan. Kedua bentuk nama khusus itu diakses dengan metode getCollection atau tanda kurung siku.
db.nilai.tambahan.insertOne({ nim: "101", kode: "BD1", skor: 88 })
db.getCollection("nilai.tambahan").findOne(){
acknowledged: true,
insertedId: ObjectId('6ae8751e93aa58bb76ce5f49')
}
{
_id: ObjectId('6ae8751e93aa58bb76ce5f49'),
nim: '101',
kode: 'BD1',
skor: 88
}db.createCollection("2026-ujian")
db["2026-ujian"].insertOne({ kode: "UJ1", tanggal: "2026-06-20" })
show collections{ ok: 1 }
{
acknowledged: true,
insertedId: ObjectId('6ae8751e93aa58bb76ce5f4a')
}
2026-ujian
dosen
mahasiswa
nilai.tambahan
ruangKeluaran show collections memuat kedua koleksi baru itu, sehingga notasi mana yang dipakai tidak mengubah hasil akhirnya. Meski demikian, nama dengan tanda titik dan nama yang diawali angka lebih baik dihindari bila tidak ada alasan khusus, karena setiap aksesnya memerlukan bentuk yang lebih panjang dan salah baca lebih mudah terjadi.
Kesalahan umum#
Kesalahan pertama yang sering terjadi adalah basis data baru yang tidak muncul pada show dbs. Penyebabnya, use hanya mengganti konteks dan server menyimpan basis data baru setelah koleksi pertamanya berisi dokumen. Perbaikannya, sisipkan satu dokumen ke koleksi mana pun pada basis data itu, lalu jalankan show dbs kembali.
Kesalahan kedua adalah koleksi kembar akibat huruf kapital. Sisipan ke db.Mahasiswa tidak menyentuh koleksi mahasiswa karena akses koleksi peka huruf kapital, sehingga koleksi baru bernama Mahasiswa terbentuk tanpa peringatan.
db.Mahasiswa.insertOne({ nama: "Tono" })
show collections
db.Mahasiswa.drop(){
acknowledged: true,
insertedId: ObjectId('6ae8751e93aa58bb76ce5f4b')
}
2026-ujian
dosen
mahasiswa
Mahasiswa
nilai.tambahan
ruang
trueDaftar pada keluaran memuat Mahasiswa di samping mahasiswa, sedangkan drop() mengembalikan true saat koleksi yang tersasar berhasil dihapus. Perbaikannya terdiri atas dua langkah, yaitu menghapus koleksi yang keliru dengan drop lalu mengulang sisipan ke nama yang benar.
Kesalahan ketiga adalah memakai karakter terlarang pada nama koleksi. Server menolak nama yang memuat $ atau diawali system. dengan pesan error, sebagaimana blok berikut.
db.createCollection("nilai$kuis")Uncaught
MongoServerError[InvalidNamespace]: Invalid collection name: nilai$kuisPerbaikannya adalah memilih nama tanpa $ dan tanpa awalan system., misalnya nilai_kuis dengan garis bawah yang tetap dapat ditulis lewat notasi titik.
Ringkasan#
- Server menata data berlapis, yaitu basis data memuat koleksi dan koleksi memuat dokumen.
usehanya mengganti basis data aktif, sedangkan sisipan pertama menciptakan basis data dan koleksinya secara implisit.db.createCollectionmenciptakan koleksi kosong secara eksplisit beserta opsi tambahannya.- Nama koleksi peka huruf kapital, melarang
$dan awalansystem., serta dijangkau lewatgetCollectionbila memuat tanda titik atau diawali angka.
Referensi#
- Databases and Collections — MongoDB Manual — Konsep basis data, koleksi, dan pembuatan implisit pada manual resmi MongoDB.
- MongoDB Limits and Thresholds — MongoDB Manual — Aturan penamaan dan batas panjang nama basis data serta koleksi.
- db.createCollection() — MongoDB Manual — Referensi metode pembuatan koleksi eksplisit beserta opsi yang tersedia.