Selama ini kita berbicara ke MongoDB lewat mongosh — cukup untuk belajar, tetapi aplikasi nyata tidak bisa mengetik perintah satu per satu. Aplikasi JavaScript memerlukan pustaka yang menerjemahkan panggilan fungsi menjadi protokol khusus MongoDB, menerima balasan server, dan mengubah BSON menjadi object JavaScript. Pustaka itu adalah driver resmi bernama mongodb — paket npm yang dikelola langsung oleh tim MongoDB. Chapter ini menyiapkan proyek Node.js dari nol, memasang driver, lalu memastikan instalasinya benar dengan ping pertama.

Peta materi Chapter ini:

  • Membuat proyek npm dan memasang paket mongodb.
  • Memahami perbedaan CommonJS (CJS) dan ECMAScript Modules (ESM).
  • Menyesuaikan versi Node.js dengan versi driver.
  • Menguji instalasi dengan file cek-driver.js.

Memasang Paket Driver #

Driver adalah dependency biasa dari npm, jadi pemasangannya mengikuti alur standar proyek Node.js: buat proyek baru, lalu instal paketnya. Kita pakai nama proyek toko-buku karena domain contoh sepanjang Section ini adalah toko buku:

bash
mkdir toko-buku && cd toko-buku
npm init -y

Output yang Dihasilkan:

text
Wrote to /tmp/toko-buku/package.json:

{
  "name": "toko-buku",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "commonjs"
}

Baris "type": "commonjs" menegaskan bahwa berkas .js di proyek ini dievaluasi sebagai CommonJS — titik penting yang kita bahas setelah ini. Lanjut ke pemasangan driver:

bash
npm install mongodb

Output yang Dihasilkan:

text
added 12 packages in 631ms

Driver terpasang bersama dependensinya (antara lain bson untuk konversi data). Setelah selesai, package.json memiliki satu entri baru di bagian dependencies, dan seluruh kodenya berada di folder node_modules:

text
  "dependencies": {
    "mongodb": "^7.7.0"
  }

Tanda sisip ^ pada ^7.7.0 berarti npm install berikutnya boleh mengambil versi 7.x yang lebih baru, tetapi tidak melompat ke 8.x. Versi yang benar-benar terpasang bisa diverifikasi tanpa membuka file apa pun:

bash
node -e "console.log(require('mongodb/package.json').version)"

Output yang Dihasilkan:

text
7.7.0

CommonJS atau ECMAScript Modules #

Node.js mengenal dua sistem modul. CommonJS (CJS) memuat modul secara sinkron dengan require() dan mengekspor lewat module.exports; ECMAScript Modules (ESM) memakai import/export dan berjalan di lingkungan yang mendukung Promise secara penuh. Pembeda praktisnya:

AspekCommonJSESM
Ekstensi / penanda.js tanpa "type" (atau "type": "commonjs")"type": "module", atau .mjs
Memuat driverconst { MongoClient } = require("mongodb")import { MongoClient } from "mongodb"
Top-level awaittidak tersediatersedia
Mengakses envprocess.env.MONGODB_URIprocess.env.MONGODB_URI

Driver 7.x mendukung keduanya, jadi pilihan adalah soal selera tim dan ekosistem. Satu konsekuensi perlu dicatat: karena CJS tidak punya top-level await, kode yang menunggu jaringan harus dibungkus function async — pola main() yang dipanggil dengan .catch():

js Dua gaya memuat dan menjalankan driver
// mdtest: skip — ilustrasi dua sistem modul, bukan file yang dijalankan

// CommonJS (dipakai konsisten di Section ini)
const { MongoClient } = require("mongodb")
async function main() {
  const client = new MongoClient(process.env.MONGODB_URI)
  await client.connect()
  await client.close()
}
main().catch(err => process.exit(1))

// ECMAScript Modules — berkas .mjs atau "type": "module"
// import { MongoClient } from "mongodb"          // top-level await boleh:
// const client = new MongoClient(process.env.MONGODB_URI)
// await client.connect()
// await client.close()

Seluruh Section ini memakai satu gaya saja: CommonJS dengan wrapper main(). Alasannya praktis — CJS tetap bawaan npm init, bekerja tanpa konfigurasi tambahan, dan pola main().catch() memberi satu titik tangkap galat yang jelas.

Versi Node.js yang Didukung #

Setiap versi besar driver menaikkan syarat minimum Node.js — informasinya tercantum di field engines pada package.json milik driver. Tabel berikut hasil membaca field itu dari registry npm:

Driver mongodbNode.js minimumStatus
5.x14.20.1tidak dikembangkan lagi
6.x16.20.1perbaikan penting saja
7.x20.19.0baris saat ini

Versi Node yang kita pakai jauh di atas syarat itu:

bash
node --version

Output yang Dihasilkan:

text
v24.21.0

Uji Instalasi dengan Ping #

Pemasangan yang sukses belum berarti koneksi bekerja — kita butuh satu file yang benar-benar menyentuh server. File berikut mencetak versi driver dan Node.js, membuka koneksi, menjalankan command ping, lalu menutup koneksi:

js
// cek-driver.js — uji instalasi: tampilkan versi driver lalu ping server
// Jalankan: MONGODB_URI="mongodb://127.0.0.1:27017/?directConnection=true" node cek-driver.js
const { MongoClient } = require("mongodb")
const versiDriver = require("mongodb/package.json").version

const uri = process.env.MONGODB_URI ?? "mongodb://127.0.0.1:27017/?directConnection=true"
const client = new MongoClient(uri, { serverSelectionTimeoutMS: 5000 })

async function main() {
  console.log("Versi driver mongodb :", versiDriver)
  console.log("Versi Node.js       :", process.version)

  await client.connect()
  const ping = await client.db("admin").command({ ping: 1 })
  console.log("Ping ke server      : ok =", ping.ok)

  await client.close()
  console.log("Instalasi siap dipakai.")
}

main().catch(err => {
  console.error("GAGAL:", err.name, "-", err.message)
  process.exit(1)
})
bash
MONGODB_URI="mongodb://127.0.0.1:27017/?directConnection=true" node cek-driver.js

Output yang Dihasilkan:

text
Versi driver mongodb : 7.7.0
Versi Node.js       : v24.21.0
Ping ke server      : ok = 1
Instalasi siap dipakai.

Mari kita bedah baris-baris kuncinya: require("mongodb/package.json") membaca metadata paket langsung dari node_modules — cara termurah membuktikan versi tanpa alat tambahan. Baris process.env.MONGODB_URI ?? "..." membaca connection string dari environment variable dan hanya jatuh ke alamat lokal bila variabel itu tidak di-set; pola ini dipakai di seluruh Section agar kode tidak menempel pada satu server. client.db("admin").command({ ping: 1 }) mengirim command administratif paling ringan — server membalas { ok: 1 } tanpa menyentuh data apa pun. Terakhir, client.close() menutup koneksi sebelum proses keluar.

Jika baris GAGAL: MongoServerSelectionError ... yang muncul, artinya driver terpasang dengan benar tetapi server tidak dapat dijangkau — periksa apakah mongod berjalan dan URI sudah tepat. Koneksi inilah topik penuh Chapter berikutnya.

Rangkuman #

  • Driver resmi terpasang lewat npm install mongodb; versi terpasang diverifikasi dengan node -e "console.log(require('mongodb/package.json').version)".
  • npm init -y menghasilkan proyek CommonJS; Section ini konsisten memakai CJS + wrapper main() async karena tanpa top-level await.
  • Driver 7.x mensyaratkan Node.js 20.19 ke atas; Node 14/16/18 sudah end-of-life.
  • cek-driver.js membuktikan rantai lengkap: paket termuat, koneksi terbuka, ping berbalas ok = 1, koneksi tertutup.