สร้าง 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 ที่ใช้บ่อย
| 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 | ความยาวสตริง/อาร์เรย์ |
| pattern | Regex Pattern สำหรับ String |