REPL mongosh terasa seperti percakapan: kita mengetik, shell menjawab. Agar percakapan itu lancar, kita perlu tiga keterampilan dasar — menulis perintah satu baris dan multi-baris, membaca hasil yang dicetak shell, serta memakai fasilitas interaktif seperti pelengkapan otomatis dan riwayat perintah. Chapter ini melatih ketiganya sekaligus memperkenalkan perintah-perintah titik (dot commands) bawaan shell.

Perintah Satu Baris #

Setiap baris yang kita ketik dievaluasi sebagai satu statement JavaScript, lalu hasilnya di-echo oleh REPL. Kita mulai dengan dua perintah satu baris — berpindah ke database latihan, lalu menyimpan satu document:

js
use latihan_shell

Output yang Dihasilkan:

text
switched to db latihan_shell
js
db.produk.insertOne({ nama: "Buku Tulis", harga: 9000 })

Output yang Dihasilkan:

text
{
  acknowledged: true,
  insertedId: ObjectId('6ad37ecb1672d3368e5fd4d9')
}

Perhatikan polanya: use dibalas konfirmasi singkat, sedangkan insertOne() dibalas document hasil berisi status penulisan. Statement berikutnya bisa langsung diketik — tidak ada pola khusus untuk memisahkan perintah.

Perintah Multi-Baris #

Untuk kode yang panjang, REPL tidak menuntut satu baris. Selama kurung kurawal atau kotak belum tertutup, shell menunggu baris lanjutan — secara interaktif prompt berubah menjadi ... sebagai tanda perintah masih berjalan, dan baris baru dievaluasi begitu kurung terakhir tertutup. Contohnya insertMany() dengan array yang kita pecah beberapa baris:

js
db.produk.insertMany([
  { nama: "Pensil", harga: 3000 },
  { nama: "Spidol", harga: 8000 },
  { nama: "Stabilo", harga: 11000 }
])

Output yang Dihasilkan:

text
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId('6ad37ecc1672d3368e5fd4da'),
    '1': ObjectId('6ad37ecc1672d3368e5fd4db'),
    '2': ObjectId('6ad37ecc1672d3368e5fd4dc')
  }
}

Susunan baris seperti itu murni gaya penulisan — JavaScript tidak peduli di mana spasi dan baris baru berada, jadi silakan pecah kode yang panjang agar mudah dibaca. Bila kita salah membuka kurung dan merasa terjebak di tengah statement, ketik .break lalu Enter untuk membatalkan seluruh statement yang belum selesai, atau tekan Ctrl+C untuk efek yang sama.

Membaca Hasil Perintah #

Tiga bentuk hasil yang paling sering muncul: hasil penulisan, document hasil pembacaan, dan cursor. Hasil penulisan sudah kita lihat di atas — acknowledged: true berarti server mengonfirmasi, dan insertedIds memuat _id setiap document yang dibuat otomatis, dengan kunci array ('0', '1', '2') mengikuti posisi document pada insertMany().

Pembacaan satu document lewat findOne() mengembalikan document itu sendiri:

js
db.produk.findOne({ nama: "Spidol" })

Output yang Dihasilkan:

text
{
  _id: ObjectId('6ad37ecc1672d3368e5fd4db'),
  nama: 'Spidol',
  harga: 8000
}

Sementara find() mengembalikan cursor — shell menampilkannya sebagai array document, maksimal 20 document per layar; bila masih ada sisa, shell menampilkan pesan Type "it" for more (kita bahas lengkap di Chapter Helper Methods):

js
db.produk.find()

Output yang Dihasilkan:

text
[
  {
    _id: ObjectId('6ad37ecb1672d3368e5fd4d9'),
    nama: 'Buku Tulis',
    harga: 9000
  },
  {
    _id: ObjectId('6ad37ecc1672d3368e5fd4da'),
    nama: 'Pensil',
    harga: 3000
  },
  {
    _id: ObjectId('6ad37ecc1672d3368e5fd4db'),
    nama: 'Spidol',
    harga: 8000
  },
  {
    _id: ObjectId('6ad37ecc1672d3368e5fd4dc'),
    nama: 'Stabilo',
    harga: 11000
  }
]

Kesalahan ketik pun dibalas dengan jelas. Perhatikan respons saat nama method salah:

js
db.produk.fnd()

Output yang Dihasilkan:

text
Uncaught 
TypeError: db.produk.fnd is not a function

Pesan ini dibaca dari kiri: Uncaught TypeError adalah jenis kesalahannya, dan db.produk.fnd is not a function menyebut persis ekspresi bermasalah — tidak ada method fnd pada collection. Biasanya ini tanda salah ketik (fnd → find) atau method memang tidak ada.

Fasilitas Interaktif dan Perintah Titik #

Di sesi interaktif, tombol Tab melengkapi nama method dan field yang kita ketik, sedangkan panah atas-bawah memanggil kembali perintah sebelumnya dari riwayat — riwayat ini bertahan antar sesi, jadi perintah dari kemarin masih bisa dipanggil. Fungsi cls menghapus layar bila tampilan mulai penuh.

Selain itu ada sekelompok perintah titik yang diawali . dan hanya berlaku di REPL. Daftarnya bisa dilihat lewat .help:

js
.help

Output yang Dihasilkan:

text
.break   Sometimes you get stuck, this gets you out
.clear
.exit    Exit the REPL
.help    Print this help message
.load    Load JS from a file into the REPL session
.save    Save all evaluated commands in this REPL session to a file

Press Ctrl+C to abort current expression, Ctrl+D to exit the REPL

Perintah .break membatalkan statement multi-baris yang sedang berjalan; .clear adalah alias-nya; .exit menutup sesi (sama dengan exit dan Ctrl+D); .load menjalankan file JavaScript seolah-olah isinya diketik di tempat; dan .save menyimpan seluruh perintah yang sudah dievaluasi ke sebuah file. Dua perintah terakhir itu adalah pasangan yang tepat untuk kode panjang: simpan rangkaian perintah yang terbukti benar ke file, lalu muat kembali di sesi berikutnya tanpa mengetik ulang. Ketik help tanpa titik untuk daftar helper shell lain seperti use, show, dan it.

Sebelum menutup chapter, bersihkan database latihan:

js
db.dropDatabase()

Output yang Dihasilkan:

text
{ ok: 1, dropped: 'latihan_shell' }

Rangkuman #

  • Setiap baris statement dievaluasi lalu hasilnya di-echo; use dibalas konfirmasi, insertOne() dibalas document status.
  • Statement boleh dipecah beberapa baris; REPL menunggu hingga semua kurung tertutup — tekan .break atau Ctrl+C untuk membatalkan.
  • Kenali tiga bentuk hasil: status penulisan (acknowledged, insertedIds), document (findOne()), dan cursor (find(), tampil sebagai array).
  • Pesan error dibaca dari kiri: jenis kesalahan, lalu ekspresi penyebabnya.
  • Tab melengkapi ketikan, panah atas memanggil riwayat, cls membersihkan layar, dan .help mendaftar perintah titik.