MongoDB hỗ trợ **Schema Validation** (từ phiên bản 3.2, mạnh từ 3.6 với JSON Schema) để bắt buộc cấu trúc dữ liệu tại cấp database. Sử dụng db.createCollection() với tùy chọn validator định nghĩa JSON Schema: kiểu dữ liệu (bsonType), trường bắt buộc (required), mô tả.
1. Tạo collection có validation: Bắt buộc FirstName, LastName kiểu string
> 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 }
2. Test Validation: Insert dữ liệu SAI kiểu (LastName là number)
> db.demo437.insertOne({ "FirstName": "John", "LastName": 1234 });
// LỖI: WriteError: Document failed validation
// "errmsg": "Document failed validation"
3. Test Validation: Insert dữ liệu ĐÚNG
> db.demo437.insertOne({ "FirstName": "John", "LastName": "Smith" });
{ "acknowledged": true, "insertedId": ObjectId("5e7757f7bbc41e36cc3cae9b") }
> db.demo437.insertOne({ "FirstName": "David", "LastName": "Miller" });
{ "acknowledged": true, "insertedId": ObjectId("5e775816bbc41e36cc3cae9d") }
4. Test Validation: Insert SAI kiểu FirstName (number)
> db.demo437.insertOne({ "FirstName": 9887, "LastName": "Miller" });
// LỖI: Document failed validation
5. Xem dữ liệu hợp lệ
> db.demo437.find();
Kết quả:
{ "_id": ObjectId("..."), "FirstName": "John", "LastName": "Smith" }
{ "_id": ObjectId("..."), "FirstName": "David", "LastName": "Miller" }
Các tùy chọn Validation quan trọng:
validationLevel:strict(mặc định, validate insert + update),moderate(chỉ validate insert/update doc đã valid),off(tắt).validationAction:error(mặc định, reject),warn(chỉ log warning, cho ghi).- Cập nhật validator:
db.runCommand({ collMod: "demo437", validator: { ... } }).
JSON Schema hỗ trợ: enum, minimum/maximum, pattern (regex), minItems/maxItems, uniqueItems, nested object/array schema.