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:
| Bahasa | Driver | Instalasi | Garis versi (Sept 2026) |
|---|---|---|---|
| JavaScript / Node.js | mongodb | npm install mongodb | 7.x |
| Python | PyMongo | pip install pymongo | 4.18 |
| Java | Java Driver | Maven mongodb-driver-sync | 5.x |
| Go | Go Driver | go get go.mongodb.org/mongo-driver/v2 | 2.x |
| C# / .NET | .NET Driver | NuGet MongoDB.Driver | 3.x |
| Rust | Rust Driver | crates.io mongodb | 3.x |
| PHP | ext-mongodb | pecl install mongodb | 2.x |
| Ruby | Ruby Driver | gem install mongo | 2.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:
const h = db.hello()
printjson({
connectionId: h.connectionId,
maxWireVersion: h.maxWireVersion,
logicalSessionTimeoutMinutes: h.logicalSessionTimeoutMinutes
})Output yang Dihasilkan:
{
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):
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:
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:
| Tahap | mongosh | Node.js (mongodb) | Python (PyMongo) |
|---|---|---|---|
| Client | otomatis saat startup | new MongoClient(uri) | MongoClient(uri) |
| Database | use toko | client.db("toko") | client.toko |
| Collection | db.pesanan | db.collection("pesanan") | db.pesanan |
| Sisip satu | insertOne({...}) | await ...insertOne({...}) | insert_one({...}) |
| Kueri + sort | find({...}).sort({...}) | sama + await | find({...}).sort("harga", 1) |
Blok ilustrasi berikut memperlihatkan query yang sama dalam dua driver — perhatikan betapa sedikitnya yang berubah:
// 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()# 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:
db = db.getSiblingDB("latihan_driver")
db.dropDatabase()Output yang Dihasilkan:
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.
| Aspek | Driver resmi | ODM |
|---|---|---|
| Kontrol query | penuh, satu-ke-satu ke server | dibatasi abstraksi bawaannya |
| Schema | diatur di database ($jsonSchema validator) | didefinisikan di kode aplikasi |
| Validasi | dijalankan server | otomatis di aplikasi sebelum kirim |
| Kurva belajar | landai bila sudah paham mongosh | ada API tambahan milik ODM |
| Pas untuk | pipeline kompleks, tim lintas bahasa | aplikasi 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
hellomenghasilkan 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.