Semua perintah yang kita ketik di mongosh mengarah ke satu sasaran: database aktif. Salah memilih database berarti perintah insertOne() menyimpan data ke tempat yang keliru, dan dropDatabase() menghapus data yang bukan dimaksudkan. Chapter ini membahas cara berpindah database dengan use, cara MongoDB menangani database yang belum ada, serta padanan use untuk skrip.

Memilih Database dengan use #

Perintah use mengalihkan database aktif. Kita pakai database latihan khusus untuk seluruh Section ini:

js
use latihan_shell

Output yang Dihasilkan:

text
switched to db latihan_shell

Prompt berubah dari test> menjadi latihan_shell> — indikator langsung bahwa perintah berikutnya mengarah ke database baru ini. Nama database aktif juga bisa dibaca lewat method:

js
db.getName()

Output yang Dihasilkan:

text
latihan_shell

Yang menarik: latihan_shell belum pernah kita buat, tetapi use tidak menolak dan tidak mengeluh. MongoDB menerima pilihan ini dengan tenang karena satu sifat penting yang kita bahas berikutnya.

Lazy Creation: Database Menunggu Data #

MongoDB tidak membuat apa pun ketika kita menjalankan use pada nama yang belum ada. Server baru mengalokasikan database — beserta collection pertamanya — saat document pertama ditulis. Perilaku ini disebut lazy creation: pembuatan menunggu sampai benar-benar diperlukan.

Bukti pertama: latihan_shell tidak muncul di daftar database karena belum berisi data:

js
show dbs

Output yang Dihasilkan:

text
admin    80.00 KiB
config  364.00 KiB
local   552.00 KiB

Daftar di atas hanya berisi database bawaan; isi daftar pada server Anda mengikuti riwayat pemakaian server itu sendiri. Sekarang tulis satu document ke collection peserta:

js
db.peserta.insertOne({ nama: "Siti", kota: "Bandung" })

Output yang Dihasilkan:

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

Satu perintah ini sekaligus menciptakan tiga hal: database latihan_shell, collection peserta, dan document pertamanya. Setelah tulisan pertama, database baru terdaftar:

js
show dbs

Output yang Dihasilkan:

text
admin           80.00 KiB
config         364.00 KiB
latihan_shell    8.00 KiB
local          552.00 KiB

Collection di dalamnya pun bisa didaftar:

js
show collections

Output yang Dihasilkan:

text
peserta

db.getName() dan Jebakan db.name #

Kalau ingin tahu database aktif dari dalam kode, method yang benar adalah db.getName(). Ada satu jebakan klasik yang perlu dihindari: menulis db.name. Mari kita lihat akibatnya:

js
db.name

Output yang Dihasilkan:

text
latihan_shell.name

Keluaran latihan_shell.name bukanlah nama database. Di mongosh, pola db.<kata> selalu berarti referensi ke collection bernama <kata> — jadi db.name adalah handle ke collection bernama name, dan shell mencetaknya sebagai namespace latihan_shell.name. Ekspresi ini tidak error sama sekali, sehingga kesalahan ini bisa lolos tanpa disadari.

Padanan untuk Skrip: getSiblingDB #

Perintah use hanya hidup di mode REPL. Pada mode skrip (--file), use tidak dikenali dan eksekusi berhenti — padanannya adalah method getSiblingDB(). Method ini mengembalikan handle database tanpa mengubah variabel db:

js
const laporan = db.getSiblingDB("latihan_laporan")
laporan.getName()
db.getName()

Output yang Dihasilkan:

text
latihan_laporan
latihan_shell

Baris pertama hasil menunjukkan laporan menunjuk ke latihan_laporan, sedangkan baris kedua membuktikan database aktif masih latihan_shell. Bila memanggil getSiblingDB() lalu menugaskan hasilnya ke db, database aktif ikut berpindah — persis perilaku use:

js
db = db.getSiblingDB("latihan_laporan")
db.getName()

Output yang Dihasilkan:

text
latihan_laporan
latihan_laporan

Baris pertama adalah echo dari pernyataan penugasan itu sendiri — shell mencetak nilai db yang baru — dan baris kedua adalah hasil db.getName(). Keduanya sepakat: database aktif kini latihan_laporan. Pola db = db.getSiblingDB("nama") inilah yang dipakai di file skrip dan oleh berbagai tools otomatis. Sebagai penutup, biasakan membersihkan database latihan setelah selesai (mekanisme dropDatabase() sudah kita bahas di Chapter Verifikasi Instalasi):

js
use latihan_shell

Output yang Dihasilkan:

text
switched to db latihan_shell
js
db.dropDatabase()

Output yang Dihasilkan:

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

Rangkuman #

KebutuhanPerintahCatatan
Berpindah database di REPLuse latihan_shellPrompt ikut berubah
Membaca nama database aktifdb.getName()db.name adalah collection, bukan nama
Berpindah database di skripdb = db.getSiblingDB("nama")Handle tanpa pindah: const d = db.getSiblingDB("nama")
Database dan collection barudibuat otomatis saat tulis pertamalazy creation
  • use menerima nama database yang belum ada tanpa error; database baru tercipta bersama document pertama.
  • show dbs dan show collections hanya mencantumkan yang sudah berisi data.
  • Bersihkan database latihan dengan db.dropDatabase() setelah selesai dipakai.