Belajar MongoDB - Schema Validation & Data Integrity Rules
Episode 8 of 21

Belajar MongoDB - Schema Validation & Data Integrity Rules

Menegakkan aturan data di dalam MongoDB dengan JSON Schema $jsonSchema validator, memahami perbedaan validation level strict dan moderate, memilih validation action error atau warn, serta menerapkan aturan untuk menjaga integritas data.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 6 dan 7 kalian merancang schema dengan sadar. Tapi desain terbaik sekalipun akan luntur jika tidak dijaga — di aplikasi dengan banyak tim, satu developer bisa dengan tidak sengaja menyimpan age sebagai string atau melupakan field wajib email. Di RDBMS, database menolak data yang melanggar constraint. Di MongoDB yang "schemaless", kalian bisa menambahkan aturan yang sama — itulah schema validation.

Episode 8 mengajarkan cara menegakkan integritas data di level database. Roadmap-nya: pertama kita pahami JSON Schema validator dan $jsonSchema, kedua kita bahas validation level strict versus moderate, ketiga validation action error versus warn, keempat kita praktikkan membuat collection dengan validator lengkap, dan terakhir kita pelajari cara mengubah validator pada collection yang sudah ada. Mari mulai.

JSON Schema Validation pada Collection

Konsep $jsonSchema

MongoDB mendukung validasi dokumen berbasis JSON Schema — standar open untuk mendeskripsikan struktur data. Validator didefinisikan saat pembuatan collection dengan opsi validator, dan MongoDB mengeksekusinya pada setiap insert dan update.

Membuat collection dengan validator dasar
db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "name"],
      properties: {
        email: {
          bsonType: "string",
          pattern: "^.+@.+$"
        },
        age: {
          bsonType: "int",
          minimum: 0,
          maximum: 150
        }
      }
    }
  }
})

Perhatikan elemen-elemen validator:

  • bsonType: "object" — dokumen harus berupa object BSON.
  • required: ["email", "name"] — field wajib yang harus ada.
  • properties — aturan per-field: tipe, pola regex, batas angka.

Setelah collection ini dibuat, dokumen tanpa email atau dengan age bertipe string akan ditolak.

Aturan Tambahan yang Sering Dipakai

JSON Schema menyediakan banyak keyword untuk menegakkan integritas:

KeywordFungsiContoh
requiredField wajibrequired: ["email", "name"]
minProperties / maxPropertiesBatas jumlah fieldmaxProperties: 20
patternRegex untuk stringpattern: "^.+@.+$"
minLength / maxLengthPanjang stringmaxLength: 100
minimum / maximumBatas angkaminimum: 0, maximum: 150
enumNilai yang diizinkanenum: ["active", "inactive"]
additionalProperties: falseTolak field tak dikenaladditionalProperties: false
Validator dengan enum dan panjang
db.createCollection("orders", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["status", "total"],
      properties: {
        status: {
          enum: ["pending", "paid", "shipped", "cancelled"]
        },
        total: {
          bsonType: "decimal",
          minimum: 0
        },
        note: {
          bsonType: "string",
          maxLength: 500
        }
      }
    }
  }
})

Validator di atas memastikan status hanya salah satu dari empat nilai yang sah, total harus decimal non-negatif, dan note (jika ada) tidak melebihi 500 karakter.

Validation Level: strict vs moderate

Level validasi menentukan dokumen apa yang diperiksa:

  • strict (default) — validator diterapkan ke semua dokumen yang masuk, baik insert maupun update. Artinya, jika kalian meng-update dokumen lama yang tidak sesuai validator, update bisa gagal.
  • moderate — validator hanya diterapkan ke dokumen yang sudah sesuai validator saat pertama kali dimasukkan. Dokumen lama yang melanggar tidak akan dihambat selama di-update. Ini berguna saat ingin menegakkan aturan pada data baru tanpa tersandung data historis yang sudah terlanjur tidak sesuai.
Membuat collection dengan validationLevel moderate
db.createCollection("products", {
  validationLevel: "moderate",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name"],
      properties: {
        name: { bsonType: "string" },
        price: { bsonType: "decimal", minimum: 0 }
      }
    }
  }
})

Validation Action: error vs warn

Action menentukan apa yang terjadi saat validasi gagal:

  • error (default) — MongoDB menolak dokumen dan mengembalikan error; insert atau update gagal.
  • warn — MongoDB menyimpan dokumen, tapi menulis pesan peringatan di log. Berguna saat mencoba-coba validator baru tanpa risiko memblokir produksi.
Collection dengan validationAction warn
db.createCollection("logs", {
  validationAction: "warn",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["level", "message"],
      properties: {
        level: { enum: ["info", "warn", "error"] },
        message: { bsonType: "string" }
      }
    }
  }
})

Mengubah Validator pada Collection yang Ada

Tidak perlu menghapus collection untuk mengganti validator — gunakan perintah collMod (modify collection). Ini pola yang sangat umum di produksi: schema berkembang, dan aturan validasi diperketat bertahap.

Memperbarui validator collection yang sudah ada
db.runCommand({
  collMod: "users",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "name", "role"],
      properties: {
        email: { bsonType: "string", pattern: "^.+@.+$" },
        name: { bsonType: "string", maxLength: 80 },
        role: { enum: ["student", "mentor", "admin"] },
        age: { bsonType: "int", minimum: 0, maximum: 150 }
      }
    }
  },
  validationLevel: "moderate"
})

Perhatikan: validasi di atas menambahkan role ke daftar wajib dan menetapkan validationLevel: moderate. Dengan moderate, dokumen lama yang tidak punya role tetap bisa di-update tanpa gagal — transisi yang halus alih-alih memblokir data historis.

Warning

Hati-hati dengan additionalProperties: false. Ia membuat MongoDB menolak field baru yang tidak tercantum di validator — kejutan menyakitkan saat aplikasi menambahkan field baru namun lupa memperbarui validator. Untuk schema yang masih berkembang cepat, biarkan default additionalProperties: true dan hanya perketat untuk collection yang benar-benar stabil.

Info

Validasi schema bukan pengganti desain yang baik — ia adalah jaring pengaman yang mewujudkan desain kalian di level database. Kombinasikan dengan validasi di aplikasi (misal library seperti Zod atau Mongoose) untuk pertahanan berlapis: aplikasi menangkap error lebih awal dan ramah pengguna, database menegakkan aturan terakhir yang tak bisa dihindari oleh bug aplikasi.

Penutup

Pada episode 8 ini kalian telah menegakkan integritas data langsung di database: mendefinisikan aturan dengan $jsonSchema pada saat pembuatan collection — mencakup required, tipe data via bsonType, pola regex pattern, batas angka, dan enum — memahami validation level strict yang memeriksa semua dokumen versus moderate yang menghormati data historis, serta memilih validation action error yang menolak data rusak atau warn yang hanya mencatat peringatan. Kalian juga belajar meng-upgrade validator collection yang ada lewat collMod.

Inti yang harus dibawa pulang:

  • $jsonSchema validator menegakkan aturan struktur, tipe, dan nilai pada insert/update.
  • strict memeriksa semua dokumen; moderate hanya memeriksa dokumen yang sudah patuh.
  • error memblokir data; warn menerima data dan mencatat peringatan.
  • Gunakan collMod untuk memperbarui validator tanpa menghapus collection.
  • Validasi di database melengkapi — bukan menggantikan — validasi di aplikasi.

Di episode 9 berikutnya kita memasuki fase paling menarik: Aggregation Pipeline Fundamentals. Kalian akan memproses data melalui stages bertahap — $match, $project, $group, $sort, $limit, dan $unwind — dan menghitung agregasi seperti $sum, $avg, dan $push untuk menghasilkan insight dari data. Sampai jumpa di episode 9!

Belajar MongoDB - Schema Validation & Data Integrity Rules | Belajar MongoDB