Daftar ada di mana-mana dalam aplikasi nyata: tag pada artikel, peran pengguna, riwayat pesanan pelanggan, nomor telepon cadangan. MongoDB memperlakukan array sebagai warga kelas satu — bukan tipe pelengkap — sehingga daftar bisa disimpan, dicari, dan diindeks tanpa tabel perantara. Bersama nested document, array melengkapi dua pola penyusun model data MongoDB; Chapter ini menutup Section dengan membedah keduanya dari sisi array.
Peta materi Chapter ini:
- Array nilai skalar: tag produk beserta akses indeks posisi.
- Pencarian ke dalam array: kecocokan elemen dan akses posisi
array.0. - Array of documents: riwayat pesanan di dalam document pelanggan.
Array Nilai Skalar #
Mulai dari bentuk paling sederhana: satu field yang menampung banyak nilai. Document produk berikut menyimpan tag dalam array string:
use latihan_array
db.produk.insertOne({
nama: "Kopi Gayo",
harga: 45000,
tags: ["kopi", "arabika", "promo"]
})Output yang Dihasilkan:
switched to db latihan_array
{
acknowledged: true,
insertedId: ObjectId('6ad38069defe88b861b8ec8a')
}Baca kembali document tersebut lalu telusuri array-nya:
const p = db.produk.findOne()
p.tags
p.tags[0]
p.tags[2]
p.tags.lengthOutput yang Dihasilkan:
[ 'kopi', 'arabika', 'promo' ]
kopi
promo
3Aksesnya mengikuti aturan JavaScript: indeks dimulai dari nol, dan .length melaporkan jumlah elemen. Kekuatan sesungguhnya muncul saat mencari. Query equality terhadap array akan cocok bila salah satu elemen memenuhi nilai tersebut:
db.produk.find({ tags: "promo" })Output yang Dihasilkan:
[
{
_id: ObjectId('6ad38069defe88b861b8ec8a'),
nama: 'Kopi Gayo',
harga: 45000,
tags: [ 'kopi', 'arabika', 'promo' ]
}
]Document Kopi Gayo dikembalikan walau tags tidak bernilai tepat "promo" — array [ "kopi", "arabika", "promo" ] cocok karena salah satu elemennya "promo". Perilaku “cocok dengan salah satu elemen” inilah yang membuat array begitu praktis untuk tag dan label.
Posisi elemen juga bisa dijadikan kunci pencarian lewat dot notation dengan indeks:
db.produk.find({ "tags.0": "kopi" })
db.produk.find({ "tags.1": "kopi" })Output yang Dihasilkan:
[
{
_id: ObjectId('6ad38069defe88b861b8ec8a'),
nama: 'Kopi Gayo',
harga: 45000,
tags: [ 'kopi', 'arabika', 'promo' ]
}
]Query pertama mencari document yang elemen pertama array tags-nya "kopi" — Kopi Gayo lolos. Query kedua mencari document yang elemen kedua-nya "kopi"; hasilnya kosong karena posisi kedua diisi "arabika". Jalur "tags.0" dibaca sebagai “field tags, elemen indeks 0”, satu langkah lagi dari "alamat.kota" yang sudah kita kenal.
Array of Documents #
Array tidak terbatas pada nilai skalar; elemennya bisa document utuh. Pola ini paling terasa pada data historis seperti riwayat pesanan:
db.pelanggan.insertOne({
nama: "Siti Rahma",
riwayat: [
{ tanggal: new Date("2026-10-01"), produk: "Kopi Gayo", total: 90000 },
{ tanggal: new Date("2026-10-15"), produk: "Teh Melati", total: 25000 }
]
})Output yang Dihasilkan:
{
acknowledged: true,
insertedId: ObjectId('6ad3806adefe88b861b8ec8b')
}Setiap elemen riwayat adalah document dengan field sendiri. Aksesnya menggabungkan indeks array dan dot notation:
const s = db.pelanggan.findOne()
s.riwayat[0].produk
s.riwayat[1].totalOutput yang Dihasilkan:
Kopi Gayo
25000s.riwayat[0].produk mengambil field produk dari elemen pertama riwayat, s.riwayat[1].total mengambil total transaksi kedua. Pencarian ke dalam array of documents juga menggabungkan keduanya — jalur "riwayat.produk" menembus setiap elemen array:
db.pelanggan.find({ "riwayat.produk": "Teh Melati" })Output yang Dihasilkan:
[
{
_id: ObjectId('6ad3806adefe88b861b8ec8b'),
nama: 'Siti Rahma',
riwayat: [
{
tanggal: ISODate('2026-10-01T00:00:00.000Z'),
produk: 'Kopi Gayo',
total: 90000
},
{
tanggal: ISODate('2026-10-15T00:00:00.000Z'),
produk: 'Teh Melati',
total: 25000
}
]
}
]Document Siti dikembalikan karena salah satu elemen riwayat memiliki field produk bernilai "Teh Melati". Kombinasi array + nested document inilah yang membuat satu document bisa mewakili “pelanggan beserta seluruh struk belanjanya” tanpa join.
Sebagai penutup, bersihkan database latihan:
db.dropDatabase()Output yang Dihasilkan:
{ ok: 1, dropped: 'latihan_array' }Rangkuman #
- Field array menampung banyak nilai dalam satu field — skalar maupun document.
- Akses elemen memakai indeks:
p.tags[0],s.riwayat[0].produk;.lengthuntuk jumlah elemen. - Query equality pada array (
{ tags: "promo" }) cocok bila salah satu elemen memenuhi. - Akses posisi lewat dot notation:
{ "tags.0": "kopi" }menguji elemen pertama saja. - Jalur
"riwayat.produk"menembus array of documents dan cocok dengan elemen mana pun. - Array yang tumbuh tanpa batas berisiko mendekati batas 16 MB — pertimbangkan collection terpisah.
Dengan nested documents dan arrays di tangan, kita telah melengkapi seluruh kosakata struktur data MongoDB. Satu Chapter tersisa: peta lengkap tipe BSON yang mengisi semua struktur tersebut.