Topik ini membahas dua metode penyisipan dokumen pada MongoDB, yaitu insertOne untuk satu dokumen dan insertMany untuk banyak dokumen sekaligus. Pembahasan mencakup hasil kembalian kedua metode, perilaku _id yang dibuat otomatis, serta penanganan _id ganda. Seluruh contoh menggunakan basis data perpustakaan dengan koleksi buku, dan setiap blok perintah diketik di dalam sesi mongosh.
Menyisipkan satu dokumen dengan insertOne#
Metode insertOne menyisipkan satu dokumen baru ke dalam satu koleksi. Koleksi tidak perlu dibuat terlebih dahulu karena MongoDB membuat koleksi secara otomatis pada penyisipan pertama. Argumen metode ini berupa satu objek dokumen yang berisi pasangan field dan nilai. Hasil kembaliannya berupa objek yang menyatakan status penulisan beserta nilai _id dokumen baru.
Isi dokumen tidak harus seragam antara satu dokumen dengan dokumen lainnya. Nilai field dapat berupa string, angka, nilai boolean, tanggal, array, maupun dokumen lain yang bersarang di dalam dokumen. Kelenturan ini menjadi ciri model dokumen MongoDB, meskipun struktur data tetap sebaiknya dijaga konsisten agar data mudah disaring dan dibaca ulang. Di dalam server, penyimpanannya diatur oleh BSON, yaitu format biner yang dipakai MongoDB untuk menyimpan dokumen.
Jalankan mongosh dari terminal terlebih dahulu. Setelah shell siap, pilih basis data perpustakaan sebelum perintah penyisipan diketik.
# tidak-dijalankan
# menjalankan shell mongosh dari terminal
mongoshuse perpustakaanswitched to db perpustakaanSisipkan satu dokumen buku dengan perintah berikut.
db.buku.insertOne({
judul: "Algoritma dan Pemrograman",
pengarang: "Dewi Kartika",
tahun: 2021,
stok: 4
}){
acknowledged: true,
insertedId: ObjectId('6ae85c7b069cf96f32ce5f47')
}Nilai acknowledged: true menandakan server telah menerima penulisan tersebut. Nilai insertedId berupa _id dokumen yang baru saja tersimpan. Penulisan perintah dalam beberapa baris hanya demi keterbacaan. Alasannya, mongosh terus membaca input hingga tanda kurung penutup diketik, kemudian mengeksekusinya sebagai satu pernyataan utuh.
Perilaku _id yang dihasilkan otomatis#
Setiap dokumen pada MongoDB wajib memiliki field _id yang nilainya unik di dalam koleksinya. Apabila dokumen disisipkan tanpa _id, server membuat nilai ObjectId secara otomatis. ObjectId memuat penanda waktu pembuatan beserta komponen acak, sehingga nilainya berbeda untuk setiap dokumen. Field _id berperan sebagai kunci utama karena MongoDB membuat indeks unik bernama _id_ pada setiap koleksi.
Periksa dokumen yang baru disisipkan untuk melihat _id hasil pembuatan otomatis.
db.buku.findOne({ judul: "Algoritma dan Pemrograman" }){
_id: ObjectId('6ae85c7b069cf96f32ce5f47'),
judul: 'Algoritma dan Pemrograman',
pengarang: 'Dewi Kartika',
tahun: 2021,
stok: 4
}Nilai _id juga boleh diisi sendiri apabila aplikasi memiliki penanda yang sudah bermakna, misalnya kode katalog. Penulisan _id dilakukan seperti field lainnya, yaitu di dalam dokumen yang disisipkan, dan nilainya langsung terlihat pada hasil kembalian.
db.buku.insertOne({ _id: "bk-001", judul: "Jaringan Komputer", pengarang: "Ali Rahman", tahun: 2022, stok: 2 }){ acknowledged: true, insertedId: 'bk-001' }Penyisipan berikutnya dengan nilai _id yang sama akan ditolak server. Perintahnya identik dengan penyisipan sebelumnya, sehingga kegagalan murni disebabkan oleh tabrakan _id.
db.buku.insertOne({ _id: "bk-001", judul: "Jaringan Komputer", pengarang: "Ali Rahman", tahun: 2022, stok: 2 })Uncaught
MongoServerError: E11000 duplicate key error collection: perpustakaan.buku index: _id_ dup key: { _id: "bk-001" }Pesan error E11000 duplicate key error muncul karena nilai _id bertabrakan dengan dokumen yang sudah ada. Server menolak seluruh penulisan tersebut sehingga tidak ada dokumen baru yang tersimpan. Perilaku ini menjaga keunikan kunci utama pada setiap koleksi.
Keunikan _id juga memudahkan penunjukan satu dokumen secara pasti. Perintah pembaruan dan penghapusan biasanya menyaring dokumen lewat _id apabila dokumen yang dituju sudah diketahui. Karena itu, menyimpan nilai insertedId dari hasil penyisipan merupakan kebiasaan yang berguna ketika dokumen baru perlu diakses kembali.
Menyisipkan banyak dokumen dengan insertMany#
Metode insertMany menyisipkan beberapa dokumen dalam satu kali pemanggilan. Argumennya berupa satu array yang setiap elemennya berupa satu dokumen. Hasil kembaliannya memuat field insertedIds berupa pemetaan dari posisi elemen ke nilai _id yang dibuat. Dibandingkan pemanggilan insertOne berulang kali, metode ini lebih efisien karena komunikasi dengan server hanya terjadi satu kali.
Sisipkan delapan judul buku sekaligus dengan perintah berikut.
db.buku.insertMany([
{ judul: "Struktur Data Dasar", pengarang: "Budi Santoso", tahun: 2020, stok: 3 },
{ judul: "Basis Data Relasional", pengarang: "Citra Melati", tahun: 2019, stok: 5 },
{ judul: "Sistem Operasi Modern", pengarang: "Dewi Kartika", tahun: 2018, stok: 6 },
{ judul: "Pemrograman Web", pengarang: "Budi Santoso", tahun: 2023, stok: 4 },
{ judul: "Keamanan Informasi", pengarang: "Rina Wulandari", tahun: 2021, stok: 1 },
{ judul: "Kecerdasan Buatan Terapan", pengarang: "Citra Melati", tahun: 2022, stok: 3 },
{ judul: "Rekayasa Perangkat Lunak", pengarang: "Ali Rahman", tahun: 2020, stok: 7 },
{ judul: "Statistika untuk Komputasi", pengarang: "Rina Wulandari", tahun: 2019, stok: 2 }
]){
acknowledged: true,
insertedIds: {
'0': ObjectId('6ae85c7b069cf96f32ce5f48'),
'1': ObjectId('6ae85c7b069cf96f32ce5f49'),
'2': ObjectId('6ae85c7b069cf96f32ce5f4a'),
'3': ObjectId('6ae85c7b069cf96f32ce5f4b'),
'4': ObjectId('6ae85c7b069cf96f32ce5f4c'),
'5': ObjectId('6ae85c7b069cf96f32ce5f4d'),
'6': ObjectId('6ae85c7b069cf96f32ce5f4e'),
'7': ObjectId('6ae85c7b069cf96f32ce5f4f')
}
}Pastikan jumlah dokumen pada koleksi dengan perintah berikut.
db.buku.countDocuments()10Hasil penghitungan berjumlah sepuluh karena koleksi sudah memuat dua dokumen dari bagian sebelumnya, sedangkan penyisipan _id ganda tidak menambah apa pun.
Secara default, insertMany menulis dokumen secara terurut (ordered), yaitu satu per satu mengikuti urutan array. Apabila satu dokumen gagal, misalnya karena _id ganda, dokumen-dokumen setelahnya tidak disisipkan. Pilihan ordered: false membuat server tetap mencoba sisa dokumen meskipun ada yang gagal, dan hasil kembaliannya melaporkan kesalahan setiap dokumen yang gagal.
Pemilihan antara kedua metode mengikuti kebutuhan. Gunakan insertOne apabila dokumen dibuat satu per satu dari interaksi aplikasi, misalnya satu catatan peminjaman baru. Gunakan insertMany apabila banyak dokumen perlu dibuat sekaligus, misalnya memuat data awal atau menyalin data dari sumber lain.
Ringkasan#
insertOnemenyisipkan satu dokumen dan mengembalikan_iddokumen baru, sedangkaninsertManymenyisipkan banyak dokumen sekaligus dan mengembalikan pemetaaninsertedIds.- Tanpa
_id, server membuat ObjectId otomatis, dan keunikan_iddijaga oleh indeks unik_id_pada setiap koleksi. - Penyisipan dengan
_idganda menghasilkan errorE11000 duplicate key errordan tidak menyimpan dokumen apa pun. - Secara bawaan
insertManyberperilaku terurut sehingga satu kegagalan menghentikan sisa daftar, sedangkanordered: falsemembuat sisa daftar tetap dicoba.
Referensi#
- db.collection.insertOne() — MongoDB Manual — Dokumentasi metode penyisipan satu dokumen beserta hasil kembaliannya.
- db.collection.insertMany() — MongoDB Manual — Dokumentasi metode penyisipan banyak dokumen dan opsi ordered.
- CRUD Operations — MongoDB Manual — Ikhtisar operasi tulis dan baca pada MongoDB.