BSON memberi tahu kita format penyimpanan; Chapter ini membedah isi-nya. Document adalah unit yang kita baca dan tulis setiap hari — memahami anatominya sejak awal menyelamatkan kita dari kebingungan belakangan hari, karena query, update, dan perancangan model data semuanya merujuk pada struktur yang sama: pasangan field dan value yang membentuk pohon.
Peta materi Chapter ini:
- Anatomi dasar: pasangan
field: valuedi dalam kurung kurawal. - Menyusun document nyata dengan nested document dan array.
- Mengakses nilai dengan dot notation dan kurung siku.
- Field
_idyang ditambahkan otomatis pada setiap document.
Pasangan Field dan Value #
Document dibangun dari pasangan field: value yang dipisahkan koma dan dibungkus kurung kurawal { }. Field adalah nama label, value adalah data — dan value boleh berupa tipe BSON apa pun, termasuk document lain atau array. Kita mulai dengan satu document peserta yang menggabungkan semuanya:
use latihan_struktur
db.peserta.insertOne({
nama: "Siti Rahma",
usia: 28,
aktif: true,
alamat: {
jalan: "Jl. Merdeka No. 10",
kota: "Bandung",
kodePos: "40115"
},
hobi: ["membaca", "fotografi", "berkebun"]
})Output yang Dihasilkan:
switched to db latihan_struktur
{
acknowledged: true,
insertedId: ObjectId('6ad380777d655807491b041f')
}Mari kita bedah strukturnya baris per baris:
nama,usia,aktif— tiga field dengan value sederhana: string, angka, dan boolean.alamat— field yang bernilai nested document: document di dalam document, ditandai kurung kurawal sendiri.hobi— field yang bernilai array: daftar nilai dalam kurung siku, di sini bertipe string semua.
Baca kembali document tersebut:
const p = db.peserta.findOne()
pOutput yang Dihasilkan:
{
_id: ObjectId('6ad380777d655807491b041f'),
nama: 'Siti Rahma',
usia: 28,
aktif: true,
alamat: { jalan: 'Jl. Merdeka No. 10', kota: 'Bandung', kodePos: '40115' },
hobi: [ 'membaca', 'fotografi', 'berkebun' ]
}Tiga hal penting langsung terlihat pada hasilnya. Pertama, field _id muncul paling depan padahal kita tidak menuliskannya — MongoDB menambahkannya otomatis sebagai primary key. Kedua, urutan field persis seperti yang kita tulis: BSON mempertahankan urutan penulisan. Ketiga, nested document dan array diringkas mongosh ke satu baris — tampilan ringkas, tetapi strukturnya tetap pohon.
Dua aturan kecil yang perlu diingat sekarang: nama field bersifat case-sensitive (Nama dan nama adalah dua field berbeda), dan satu document tidak boleh memiliki dua field dengan nama yang sama persis — di mongosh hal ini otomatis terjaga karena object JavaScript memang tidak memperbolehkan kunci ganda.
Mengakses Nilai dengan Dot Notation dan Kurung Siku #
Document yang tersimpan di server hanyalah data; untuk bekerja dengannya di shell, kita membacanya sebagai object JavaScript. Field tingkat atas diakses cukup dengan titik:
p.nama
p.usiaOutput yang Dihasilkan:
Siti Rahma
28Field yang bernilai document bisa diambil utuh, lalu ditelusuri lebih dalam dengan dot notation berantai:
p.alamat
p.alamat.kota
p["alamat"]["kodePos"]Output yang Dihasilkan:
{ jalan: 'Jl. Merdeka No. 10', kota: 'Bandung', kodePos: '40115' }
Bandung
40115p.alamat mengembalikan nested document secara utuh, sedangkan p.alamat.kota menyelam satu level untuk mengambil nilai 'Bandung'. Bentuk kurung siku p["alamat"]["kodePos"] memberikan hasil yang sama — berguna saat nama field tersimpan di variable atau memuat karakter khusus.
Array memakai indeks posisi yang dimulai dari nol:
p.hobi
p.hobi[0]
p["hobi"][2]
p.hobi.lengthOutput yang Dihasilkan:
[ 'membaca', 'fotografi', 'berkebun' ]
membaca
berkebun
3p.hobi[0] mengambil elemen pertama 'membaca', p["hobi"][2] mengambil elemen ketiga 'berkebun', dan .length melaporkan jumlah elemen array. Perhatikan bahwa mengakses indeks di luar jangkauan — misalnya p.hobi[5] — mengembalikan undefined, bukan galat.
Field _id Otomatis #
Setiap document di MongoDB wajib memiliki field _id yang nilainya unik di dalam collection-nya. Jika kita tidak menyertakannya saat insert, _id berupa ObjectId baru dibuatkan otomatis dan ditempatkan sebagai field pertama — persis seperti yang kita lihat pada p di atas. Nilai _id tidak harus ObjectId; kita bebas memakai string, angka, atau tipe lain sebagai kunci, dan itu akan dibahas tuntas di Chapter ObjectId.
Karena _id juga field biasa, aksesnya mengikuti aturan yang sama:
p._id
typeof p._idOutput yang Dihasilkan:
ObjectId('6ad380777d655807491b041f')
objectSebagai penutup, bersihkan database latihan:
db.dropDatabase()Output yang Dihasilkan:
{ ok: 1, dropped: 'latihan_struktur' }Rangkuman #
- Document adalah kumpulan pasangan
field: valuedalam kurung kurawal; urutan field dipertahankan BSON. - Value bisa tipe BSON apa pun — termasuk nested document (
alamat) dan array (hobi). - Akses nilai: dot notation untuk field (
p.alamat.kota), indeks untuk array (p.hobi[0]), kurung siku sebagai alternatif (p["alamat"]["kodePos"]). - Field
_idwajib dan unik; tanpa explicit_id, server menambahkanObjectIdotomatis di posisi pertama. - Nama field case-sensitive dan tidak boleh ganda dalam satu document.
Struktur sudah jelas; dua Chapter berikutnya memperdalam dua komponen penyusunnya — aturan penamaan field beserta ragam value, dan anatomi ObjectId yang menjadi _id bawaan.