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:
use latihan_shellOutput yang Dihasilkan:
switched to db latihan_shellPrompt berubah dari test> menjadi latihan_shell> — indikator langsung bahwa perintah berikutnya mengarah ke database baru ini. Nama database aktif juga bisa dibaca lewat method:
db.getName()Output yang Dihasilkan:
latihan_shellYang 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:
show dbsOutput yang Dihasilkan:
admin 80.00 KiB
config 364.00 KiB
local 552.00 KiBDaftar di atas hanya berisi database bawaan; isi daftar pada server Anda mengikuti riwayat pemakaian server itu sendiri. Sekarang tulis satu document ke collection peserta:
db.peserta.insertOne({ nama: "Siti", kota: "Bandung" })Output yang Dihasilkan:
{
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:
show dbsOutput yang Dihasilkan:
admin 80.00 KiB
config 364.00 KiB
latihan_shell 8.00 KiB
local 552.00 KiBCollection di dalamnya pun bisa didaftar:
show collectionsOutput yang Dihasilkan:
pesertadb.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:
db.nameOutput yang Dihasilkan:
latihan_shell.nameKeluaran 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:
const laporan = db.getSiblingDB("latihan_laporan")
laporan.getName()
db.getName()Output yang Dihasilkan:
latihan_laporan
latihan_shellBaris 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:
db = db.getSiblingDB("latihan_laporan")
db.getName()Output yang Dihasilkan:
latihan_laporan
latihan_laporanBaris 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):
use latihan_shellOutput yang Dihasilkan:
switched to db latihan_shelldb.dropDatabase()Output yang Dihasilkan:
{ ok: 1, dropped: 'latihan_shell' }Rangkuman #
| Kebutuhan | Perintah | Catatan |
|---|---|---|
| Berpindah database di REPL | use latihan_shell | Prompt ikut berubah |
| Membaca nama database aktif | db.getName() | db.name adalah collection, bukan nama |
| Berpindah database di skrip | db = db.getSiblingDB("nama") | Handle tanpa pindah: const d = db.getSiblingDB("nama") |
| Database dan collection baru | dibuat otomatis saat tulis pertama | lazy creation |
usemenerima nama database yang belum ada tanpa error; database baru tercipta bersama document pertama.show dbsdanshow collectionshanya mencantumkan yang sudah berisi data.- Bersihkan database latihan dengan
db.dropDatabase()setelah selesai dipakai.