Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การตรวจสอบข้อมูล (Validation) ใน MongoDB ด้วย JSON Schema Validator

สร้าง Collection พร้อม Validation Rules ด้วย JSON Schema

MongoDB 3.6+ รองรับ Schema Validation ผ่าน JSON Schema (Draft 4) กำหนดได้ที่ระดับ Collection เพื่อบังคับโครงสร้างและประเภทข้อมูล

คำสั่งสร้าง Collection พร้อม Validator

> db.createCollection("demo437", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["FirstName", "LastName"],
      properties: {
        FirstName: {
          bsonType: "string",
          description: "This is required"
        },
        LastName: {
          bsonType: "string",
          description: "This is required"
        }
      }
    }
  }
});

ผลลัพธ์: { "ok": 1 }

ทดสอบ Insert ข้อมูลที่ผ่าน Validation

> db.demo437.insertOne({ "FirstName": "John", "LastName": "Smith" });
> db.demo437.insertOne({ "FirstName": "David", "LastName": "Miller" });

สำเร็จ: { "acknowledged": true, "insertedId": ObjectId("...") }

ทดสอบ Insert ข้อมูลที่ล้มเหลว Validation

> db.demo437.insertOne({ "FirstName": "John", "LastName": 1234 });
// WriteError: Document failed validation - LastName ต้องเป็น string

> db.demo437.insertOne({ "FirstName": 9887, "LastName": "Miller" });
// WriteError: Document failed validation - FirstName ต้องเป็น string

แสดงข้อมูลที่ Insert สำเร็จ

> db.demo437.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "FirstName": "John", "LastName": "Smith" }
{ "_id": ObjectId("..."), "FirstName": "David", "LastName": "Miller" }

ตัวเลือก Validation Level และ Action

> db.createCollection("demo437", {
  validator: { $jsonSchema: { ... } },
  validationLevel: "strict",     // "off" | "strict" (default) | "moderate"
  validationAction: "error"      // "error" (default - reject) | "warn" (log only)
});
  • validationLevel: "strict": ตรวจสอบทุก Insert และ Update
  • validationLevel: "moderate": ตรวจสอบ Insert และ Update ที่มีฟิลด์ใน Schema
  • validationAction: "error": ปฏิเสธการเขียน (Default)
  • validationAction: "warn": อนุญาตให้เขียน แต่ Log Warning (เหมาะสำหรับ Migration)

JSON Schema Keywords ที่ใช้บ่อย

เพิ่ม/แก้ไข Validator ของ Collection ที่มีอยู่

> db.runCommand({
  collMod: "demo437",
  validator: { $jsonSchema: { ... } },
  validationLevel: "moderate"
});
Keywordคำอธิบาย
bsonTypeประเภทข้อมูล: string, int, long, double, bool, object, array, date, objectId, decimal, uuid, binData
requiredอาร์เรย์ชื่อฟิลด์ที่บังคับ
propertiesนิยาม Schema ของแต่ละฟิลด์
enumค่าที่อนุญาต: { enum: ["A", "B", "C"] }
minimum/maximumค่าตัวเลขขั้นต่ำ/สูงสุด
minLength/maxLengthความยาวสตริง/อาร์เรย์
patternRegex Pattern สำหรับ String