mongosh adalah shell JavaScript interaktif yang menjadi alat kerja utama untuk mengirim perintah ke MongoDB. Topik ini merangkum navigasi yang paling sering dipakai sehari-hari, yaitu memulai sesi, menyiapkan data contoh, membaca dokumen dengan find dan findOne, memanfaatkan pembantu kursor, dan menjaga keluaran tetap mudah dibaca. Setelah membacanya, pemeriksaan data di dalam shell berlangsung lebih cepat dan hasil setiap perintah dapat dibaca dengan tepat.
Memulai sesi dan menguji koneksi#
Perintah mongosh tanpa argumen membuka sesi interaktif yang terhubung ke server lokal pada alamat 127.0.0.1:27017. Bagian awal sesi menampilkan banner berisi alamat koneksi dan versi server serta shell yang dipakai, lalu berakhir pada prompt yang menunjukkan basis data aktif. Basis data aktif bawaan bernama test, sehingga prompt pertama terlihat seperti test>, dan setiap baris yang diketik dievaluasi sebagai JavaScript.
# tidak-dijalankan
# membuka sesi interaktif mongosh yang terhubung ke server lokal
mongoshSesi interaktif cocok untuk pekerjaan berkelanjutan karena konteks basis data dan variabel tetap hidup antarperintah. Perintah use akademik mengalihkan basis data aktif dan mengubah prompt menjadi akademik>, sedangkan perintah exit menutup sesi. Apabila hanya satu perintah yang perlu dijalankan, opsi --eval mengeksekusi perintah tersebut lalu langsung keluar. Opsi --quiet menekan banner agar keluarannya bersih.
# memeriksa ketersambungan server dan mencetak field ok jawabannya
mongosh --quiet --eval "db.runCommand({ ping: 1 }).ok"1Balasan ok: 1 menandakan server hidup dan dapat dijangkau. Bentuk satu perintah ini dipakai pada pemeriksaan cepat dan skrip otomatis karena tidak meninggalkan sesi yang perlu ditutup. Apabila pemeriksaan memerlukan lebih dari satu perintah, seluruh perintah dapat dituliskan ke dalam satu berkas JavaScript yang diserahkan kepada mongosh sebagai argumen.
Menyiapkan data contoh#
Contoh sepanjang topik ini memakai koleksi mahasiswa pada basis data akademik, dan blok berikut membuat datanya. Koleksi beserta basis datanya tercipta secara implisit pada sisipan pertama, sebagaimana perilaku yang dijelaskan pada topik tentang basis data dan koleksi.
use akademik
db.mahasiswa.insertMany([ { nama: "Ali", prodi: "Matematika", usia: 20 }, { nama: "Dewi", prodi: "Fisika", usia: 19 }, { nama: "Budi", prodi: "Matematika", usia: 21 }, { nama: "Citra", prodi: "Kimia", usia: 20 } ])switched to db akademik
{
acknowledged: true,
insertedIds: {
'0': ObjectId('6ae874a409891ec9098de666'),
'1': ObjectId('6ae874a409891ec9098de667'),
'2': ObjectId('6ae874a409891ec9098de668'),
'3': ObjectId('6ae874a409891ec9098de669')
}
}Balasan insertMany memuat satu ObjectId untuk setiap dokumen yang tersimpan, dan keempatnya menjadi identitas dokumen pada koleksi. Data contoh ini sengaja dibuat kecil, yaitu hanya empat dokumen, agar keluaran setiap contoh tetap pendek dan mudah dibandingkan dengan perintahnya. Metode insertMany menerima array dokumen dan menyisipkannya menurut urutan array yang diberikan.
Nilai pada data contoh berulang secara sengaja, misalnya dua mahasiswa Matematika dan dua mahasiswa berusia 20. Pengulangan itu membuat hasil setiap penyaringan mudah ditebak sebelum perintah dijalankan, sehingga keluaran yang muncul dapat dipakai sebagai alat pemeriksa pemahaman. Bila blok yang sama dijalankan dua kali pada sesi yang sama, dokumen tersalin dua kali karena sisipan tidak memeriksa keberadaan data lama. Penghapusan duplikat dilakukan dengan db.mahasiswa.drop() sebelum blok disiapkan kembali.
Membaca dokumen dengan find dan findOne#
Perintah find tanpa argumen mengembalikan seluruh dokumen pada koleksi, sedangkan find dengan satu argumen menyaring dokumen yang cocok dengan kriteria tersebut. Kriteria paling sederhana berupa pencocokan field dengan nilai, misalnya prodi bernilai "Matematika".
db.mahasiswa.find({ prodi: "Matematika" })
db.mahasiswa.findOne({ nama: "Dewi" })[
{
_id: ObjectId('6ae874a409891ec9098de666'),
nama: 'Ali',
prodi: 'Matematika',
usia: 20
},
{
_id: ObjectId('6ae874a409891ec9098de668'),
nama: 'Budi',
prodi: 'Matematika',
usia: 21
}
]
{
_id: ObjectId('6ae874a409891ec9098de667'),
nama: 'Dewi',
prodi: 'Fisika',
usia: 19
}Hasil find berupa array tampilan yang diapit tanda kurung siku, sedangkan findOne mengembalikan satu objek dokumen yang diapit kurung kurawal. Perbedaan bentuk ini penting diperhatikan karena findOne mengambil dokumen pertama yang cocok dan tidak pernah mengembalikan array. Kriteria yang lebih kompleks memakai operator pembanding dan operator logika pada argumen yang sama.
Kriteria pencocokan tidak terbatas pada satu field. Dokumen filter dapat memuat beberapa field sekaligus, dan server mengembalikan dokumen yang memenuhi seluruh pasangan nilainya, misalnya { prodi: "Matematika", usia: 21 } yang hanya cocok untuk Budi. Field pada filter juga boleh ditulis sebagai jalur titik apabila nilainya berada di dalam objek bersarang, sebagaimana notasi yang dipakai pada topik dokumen mirip JSON. Field yang tidak disebut pada filter berarti tanpa syarat, sehingga filter kosong mengembalikan seluruh dokumen koleksi.
Pembantu kursor#
Perintah find sebenarnya mengembalikan kursor, yaitu objek yang menunjuk ke hasil query dan mengirim dokumen secara bertahap. mongosh menampilkan isi kursor secara otomatis, dan pada sesi interaktif hanya 20 dokumen pertama yang tampil sebelum shell menunggu perintah it untuk melanjutkannya. Angka 20 pada perilaku itu adalah ukuran tampilan pertama, bukan batas hasil query, karena kursor tetap memuat seluruh dokumen yang cocok. Kursor juga menyediakan metode yang memberi kendali penuh atas cara dokumen diolah.
db.mahasiswa.find({ prodi: "Matematika" }).forEach(m => print(m.nama + " usia " + m.usia))
db.mahasiswa.find({ usia: 20 }).toArray().length
db.mahasiswa.countDocuments({ usia: 20 })Ali usia 20
Budi usia 21
2
2Metode forEach menjalankan fungsi untuk setiap dokumen, dan fungsi pada contoh mencetak satu baris ringkas per dokumen melalui print. Metode toArray mengumpulkan seluruh dokumen menjadi array JavaScript, sehingga sifat array seperti length dapat dipakai. Metode countDocuments menghitung jumlah dokumen yang cocok di sisi server tanpa mengirimkan isi dokumennya. Ketiga metode itu menghabiskan kursor sampai dokumen terakhir, sehingga hasil yang sama perlu diperoleh kembali dari query baru bila ingin diolah lagi.
Menampilkan keluaran yang terbaca#
mongosh memformat hasil secara otomatis, yaitu mengindentasi dokumen, mengutip string, dan menampilkan tipe khusus seperti ObjectId dengan pembungkusnya. Dua fungsi cetak melengkapi pengaturan itu, yaitu print yang menuliskan nilai dalam satu baris dan printjson yang menuliskannya bertingkat seperti keluaran findOne. Shell lama MongoDB menuntut metode pretty untuk mendapatkan format bertingkat semacam itu, sedangkan mongosh tidak memerlukannya.
Keluaran yang panjang juga dapat diperiksa sebagian dengan menyimpan hasilnya ke dalam variabel. Baris deklarasi variabel tidak menampilkan apa pun, dan variabel itu kemudian dibaca field demi field sebagai objek JavaScript biasa. Pendekatan ini menghindari pengulangan query yang sama ketika beberapa field perlu diperiksa bergantian.
const terpilih = db.mahasiswa.findOne({ nama: "Budi" })
terpilih.prodi
terpilih.usiaMatematika
21Variabel terpilih berisi dokumen yang sama dengan hasil findOne sebelumnya, dan field-nya diakses seperti properti objek JavaScript. Pola ini menjadikan mongosh tempat yang tepat untuk menguji query dan memeriksa bentuk hasilnya sebelum pola yang sama dipindahkan ke driver aplikasi.
Kesalahan umum#
Kesalahan pertama yang sering terjadi adalah sisipan yang mendarat pada basis data test. Penyebabnya, sesi baru selalu aktif pada test, sehingga db.mahasiswa.insertOne yang diketik tanpa use akademik membuat koleksi mahasiswa baru pada basis data yang keliru. Prompt yang masih menunjukkan test> adalah penanda paling cepat karena isinya selalu mengikuti basis data aktif. Perbaikannya dimulai dari pemeriksaan prompt atau perintah db sebelum menulis, lalu koleksi yang tersasar dihapus melalui db.mahasiswa.drop() saat basis data test masih aktif.
Kesalahan kedua adalah menghitung dokumen langsung pada hasil find. Kursor tidak memiliki properti length, sehingga db.mahasiswa.find().length tidak menampilkan angka apa pun tanpa pesan error. Perbaikannya, hitung dengan countDocuments, atau kumpulkan dahulu dengan toArray sebelum membaca length-nya.
Kesalahan ketiga adalah mengira hasil query terpotong. Pada sesi interaktif, find menampilkan 20 dokumen pertama diikuti pesan Type "it" for more, dan dokumen sisanya tetap ada di dalam kursor. Perbaikannya, ketik it untuk melanjutkan tampilan, atau gunakan forEach dan toArray yang mengiterasi seluruh dokumen sekaligus.
Ringkasan#
- mongosh mengevaluasi setiap baris sebagai JavaScript, dan promptnya selalu menunjukkan basis data aktif.
findmengembalikan kursor yang isinya ditampilkan otomatis, sedangkanfindOnemengembalikan satu objek dokumen.forEach,toArray, dancountDocumentsmengiterasi atau menghitung dokumen dengan keluaran yang lebih terkendali.- Sesi interaktif menampilkan 20 dokumen pertama dan menunggu perintah
ituntuk kelanjutannya.
Referensi#
- MongoDB Shell (mongosh) — MongoDB Documentation — Panduan resmi penggunaan mongosh, mulai dari koneksi sampai perintah harian.
- MongoDB CRUD Operations in mongosh — MongoDB Documentation — Cara membaca, menyisipkan, dan mengubah dokumen langsung dari shell.
- Cursors — MongoDB Manual — Cara kerja kursor dan iterasinya dalam mengirim hasil query.
- db.collection.find() — MongoDB Manual
— Referensi lengkap metode
findbeserta argumen dan perilakunya.