Semua chapter sejauh ini berjalan di mongosh — lingkungan interaktif yang nyaman untuk bereksperimen. Aplikasi produksi bekerja secara berbeda: API backend, worker antrean, dan skrip migrasi berbicara ke MongoDB lewat driver resmi untuk bahasanya masing-masing. Kabar baiknya, seluruh driver resmi dibangun di atas satu wire protocol yang sama dan mengikuti pola API yang seragam, sehingga konsep yang sudah kita kuasai di shell langsung terbawa. Chapter ini memetakan lanskap driver, memperlihatkan pola API lintas bahasa, dan menempatkan ODM seperti Mongoose pada posisinya.

Peta materi Chapter ini:

  • Daftar driver resmi beserta garis versinya.
  • Pola API client → db → collection → operasi yang berlaku di semua driver.
  • Perbedaan peran driver resmi vs ODM (Mongoose, Beanie, Mongoid).

Driver Resmi dan Versinya #

MongoDB merawat driver resmi untuk hampir semua bahasa populer. Seluruhnya berbicara lewat wire protocol yang sama (OP_MSG), menerima feature parity pada rilis server besar, dan dikembangkan satu tim bersama server. Berikut peta singkatnya:

BahasaDriverInstalasiGaris versi (Sept 2026)
JavaScript / Node.jsmongodbnpm install mongodb7.x
PythonPyMongopip install pymongo4.18
JavaJava DriverMaven mongodb-driver-sync5.x
GoGo Drivergo get go.mongodb.org/mongo-driver/v22.x
C# / .NET.NET DriverNuGet MongoDB.Driver3.x
RustRust Drivercrates.io mongodb3.x
PHPext-mongodbpecl install mongodb2.x
RubyRuby Drivergem install mongo2.x

Course ini memin driver Node.js 7.x dan PyMongo 4.18 — dua driver itu yang akan kita eksekusi sungguhan di Section mongodb-dengan-javascript, mongodb-dengan-nodejs, dan mongodb-dengan-python. Fokus Section sekarang adalah prinsip yang berlaku untuk semua driver.

Fakta yang menghubungkan dua dunia: mongosh sendiri dibangun di atas driver Node.js. Inilah sebabnya method yang kita pakai sepanjang Course — insertOne, find, sort — juga ada (nyaris) satu-ke-satu di API driver Node.js. Migrasi dari shell ke aplikasi bukan belajar dari nol, melainkan memindahkan kebiasaan yang sama ke dalam kode.

Satu Pola API di Semua Driver #

Aturannya satu kalimat: buat client dari connection string, pilih db, pilih collection, jalankan operasi. Object client menyimpan connection pool dan topologi; operasi berjalan asynchronous di Node.js, blocking di PyMongo, dan berbasis Future di Java.

Mekanismenya pun sama: saat pertama kali dibutuhkan, driver melakukan handshake dengan mengirim command hello ke server. Kita lihat langsung isi jawaban yang diterima setiap driver saat tersambung:

js
const h = db.hello()
printjson({
  connectionId: h.connectionId,
  maxWireVersion: h.maxWireVersion,
  logicalSessionTimeoutMinutes: h.logicalSessionTimeoutMinutes
})

Output yang Dihasilkan:

text
{
  connectionId: 10267,
  maxWireVersion: 29,
  logicalSessionTimeoutMinutes: 30
}

Mari kita baca ketiga field itu: connectionId adalah nomor koneksi TCP versi server; maxWireVersion: 29 adalah versi protokol yang disepakati driver dan server 9.0; logicalSessionTimeoutMinutes: 30 memberi tahu driver berapa lama session boleh menganggur — angka yang menjadi dasar retryable writes dan transaksi. Handshake inilah kontrak bersama semua driver.

Selanjutnya bentuk rantai client → db → collection → operasi, kita jalankan dalam gaya mongosh (yang, sekali lagi, adalah driver Node.js):

js
db = db.getSiblingDB("latihan_driver")
db.produk.drop()
db.produk.insertMany([
  { nama: "Kopi Gayo", harga: 85000, kategori: "minuman" },
  { nama: "Teh Melati", harga: 45000, kategori: "minuman" }
])
const koleksi = db.produk
koleksi.find({ kategori: "minuman" }, { nama: 1, harga: 1, _id: 0 }).sort({ harga: 1 }).limit(5).toArray()

Output yang Dihasilkan:

text
latihan_driver
true
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId('6ad3de0423e0e8f5d6ac9b0b'),
    '1': ObjectId('6ad3de0423e0e8f5d6ac9b0c')
  }
}

[
  { nama: 'Teh Melati', harga: 45000 },
  { nama: 'Kopi Gayo', harga: 85000 }
]

db.getSiblingDB() memilih database (padanan use latihan_driver), db.produk mengambil handle collection, dan rantai find().sort().limit().toArray() berjalan identik di driver. Berikut padanan tahapannya di tiga lingkungan:

TahapmongoshNode.js (mongodb)Python (PyMongo)
Clientotomatis saat startupnew MongoClient(uri)MongoClient(uri)
Databaseuse tokoclient.db("toko")client.toko
Collectiondb.pesanandb.collection("pesanan")db.pesanan
Sisip satuinsertOne({...})await ...insertOne({...})insert_one({...})
Kueri + sortfind({...}).sort({...})sama + awaitfind({...}).sort("harga", 1)

Blok ilustrasi berikut memperlihatkan query yang sama dalam dua driver — perhatikan betapa sedikitnya yang berubah:

js Ilustrasi Node.js — driver mongodb
// mdtest: skip — padanan blok mongosh di atas dalam driver Node.js
const { MongoClient } = require("mongodb")
const client = new MongoClient("mongodb://127.0.0.1:27017/?directConnection=true")

async function main() {
  await client.connect()
  const koleksi = client.db("toko").collection("produk")
  const hasil = await koleksi.find({ kategori: "minuman" })
    .sort({ harga: 1 })
    .limit(5)
    .toArray()
  console.log(hasil)
  await client.close()
}
main()
python Ilustrasi Python — PyMongo
# Padanan yang sama dalam PyMongo (blocking, tanpa await)
from pymongo import MongoClient

client = MongoClient("mongodb://127.0.0.1:27017/?directConnection=true")
koleksi = client.toko.produk
hasil = list(koleksi.find({"kategori": "minuman"}).sort("harga", 1).limit(5))
client.close()

Terakhir, kita bereskan database latihan:

js
db = db.getSiblingDB("latihan_driver")
db.dropDatabase()

Output yang Dihasilkan:

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

Driver, ODM, dan Posisinya #

Di atas driver tumbuh lapisan bernama ODM (Object-Document Mapper): Mongoose 9.x untuk Node.js, Beanie dan Motor untuk Python, Mongoid untuk Ruby, Doctrine MongoDB ODM untuk PHP, Morphia untuk Java. ODM menambahkan schema level aplikasi, validasi sebelum kirim, middleware, dan helper relasi — dengan biaya berupa satu lapisan API ekstra untuk dipelajari.

AspekDriver resmiODM
Kontrol querypenuh, satu-ke-satu ke serverdibatasi abstraksi bawaannya
Schemadiatur di database ($jsonSchema validator)didefinisikan di kode aplikasi
Validasidijalankan serverotomatis di aplikasi sebelum kirim
Kurva belajarlandai bila sudah paham mongoshada API tambahan milik ODM
Pas untukpipeline kompleks, tim lintas bahasaaplikasi CRUD yang cepat jadi

Rangkuman #

  • Delapan driver resmi (Node.js, Python, Java, Go, C#, Rust, PHP, Ruby) berbagi wire protocol dan pola API: client → db → collection → operasi.
  • Handshake hello menghasilkan kontrak bersama — maxWireVersion, connectionId, logicalSessionTimeoutMinutes — yang dibaca semua driver saat tersambung.
  • mongosh dibangun di atas driver Node.js, sehingga kebiasaan shell langsung terbawa ke kode aplikasi.
  • ODM (Mongoose, Beanie, Mongoid) menumpuk di atas driver: schema dan validasi pindah ke aplikasi, dengan imbalan satu lapisan abstraksi ekstra.